60 lines
1.4 KiB
C
60 lines
1.4 KiB
C
#include "libnazgul.h"
|
|
|
|
int msgPut(msgSpace * space,int queueIndex, void * addr){
|
|
// retrouver le pool, buffer qui correspondent à l'addresse...
|
|
msgPoolData * poolDataTabAddr;
|
|
int poolIndex;
|
|
int bufferIndex;
|
|
int err;
|
|
msgPoolDataTabLock(space);
|
|
poolDataTabAddr=msgPoolDataTabOpen(space);
|
|
|
|
err=msgBufferGetProcAttach(
|
|
poolDataTabAddr,
|
|
space->poolNb,
|
|
&poolIndex,
|
|
&bufferIndex,
|
|
addr
|
|
);
|
|
|
|
// ouvrir la queue avec le bon index
|
|
msgQueueId queueId;
|
|
msgQueue * queue;
|
|
msgQueueIdIntern(queueId,space->externId,queueIndex);
|
|
|
|
msgQueueProtLock(space->externId,queueIndex);
|
|
queue = msgQueueOpen(queueId);
|
|
|
|
// TODO:creer un element vide
|
|
msgQueueElemId newElemId;
|
|
msgQueueElem * queueElem;
|
|
|
|
msgQueueElemCreate(newElemId,queueId,queue->elemCounter);
|
|
// ouvrir l'element
|
|
queueElem=msgQueueElemOpen(newElemId);
|
|
|
|
// modifier les index pour retrouver le buffer
|
|
queueElem->poolIndex=poolIndex;
|
|
queueElem->bufferIndex=bufferIndex;
|
|
|
|
// fermer l'element
|
|
msgQueueElemClose(queueElem);
|
|
|
|
//ajouter le message a la bonne file...
|
|
msgQueueAdd(queue,newElemId);
|
|
|
|
// fermer la file
|
|
msgQueueClose(queue);
|
|
msgQueueProtUnlock(space->externId,queueIndex);
|
|
|
|
msgPoolDataTabClose(space,poolDataTabAddr);
|
|
msgPoolDataTabUnlock(space);
|
|
|
|
// on laisse une nouvelle ressource de la liste au get
|
|
msgQueueReadUnlock(space->externId,queueIndex);
|
|
return 0;
|
|
ERROR:
|
|
return -1;
|
|
}
|
|
|
|
|