diff --git a/src/free.c b/src/free.c index 2becc34..58a4dba 100644 --- a/src/free.c +++ b/src/free.c @@ -50,8 +50,9 @@ sem_t * poolDataTabSemFd; msgPoolDataTabClose(space,poolDataTabAddr); // deverouiller semaphore DataInfo - sem_post(poolDataTabSemFd); - sem_close(poolDataTabSemFd); +msgPoolDataTabUnlock(space); +// sem_post(poolDataTabSemFd); +// sem_close(poolDataTabSemFd); // deverouiller semaphore ressource. msgPoolSemIdIntern(ressourceSemId,space->id,poolIndex); diff --git a/src/get.c b/src/get.c new file mode 100644 index 0000000..e69de29 diff --git a/src/poolDataTabUnlock.c b/src/poolDataTabUnlock.c index e69de29..59fa7d4 100644 --- a/src/poolDataTabUnlock.c +++ b/src/poolDataTabUnlock.c @@ -0,0 +1,29 @@ +#include "libnazgul.h" +#include "ids.h" + + +int msgPoolDataTabUnlock(msgSpace * space){ + sem_t * poolDataTabSemFd; + + poolDataTabSemFd=sem_open( + space->poolDataTabSemId + ,O_CREAT, + SEM_DEFAULT_MODE, + 1); + if(poolDataTabSemFd==SEM_FAILED){ + NZG_ERROR("sem_open",space->poolDataTabSemId); + goto ERROR; + } + + if(sem_post(poolDataTabSemFd)==-1){ + NZG_ERROR("sem_post",space->poolDataTabSemId); + goto ERROR; + } + + sem_close(poolDataTabSemFd); + + return 0; +ERROR: + return -1; +} + diff --git a/src/proto.h b/src/proto.h index 0a7c472..aebea80 100644 --- a/src/proto.h +++ b/src/proto.h @@ -41,6 +41,7 @@ int msgPoolDataTabLock(msgSpace *space); /* poolDataTabOpen.c */ void *msgPoolDataTabOpen(msgSpace *space); /* poolDataTabUnlock.c */ +int msgPoolDataTabUnlock(msgSpace *space); /* poolDelete.c */ int msgPoolDelete(msgSpaceId spaceId, int poolIdx); /* put.c */ diff --git a/src/put.c b/src/put.c index 3c27b0d..5a4ef10 100644 --- a/src/put.c +++ b/src/put.c @@ -1,15 +1,15 @@ #include "libnazgul.h" int msgPut(msgSpace * space,int queueIndex, void * addr){ - // retrouver le pool, buffer qui correspondent à l'addresse... + // retrouver le pool, buffer qui correspondent à l'addresse... msgPoolData * poolDataTabAddr; -int poolIndex; -int bufferIndex; -int err; + int poolIndex; + int bufferIndex; + int err; msgPoolDataTabLock(space); poolDataTabAddr=msgPoolDataTabOpen(space); - err=msgBufferGetProcAttach( + err=msgBufferGetProcAttach( poolDataTabAddr, space->poolNb, &poolIndex, @@ -17,41 +17,43 @@ int err; addr ); + // ouvrir la queue avec le bon index + msgQueueId queueId; + msgQueue * queue; + msgQueueIdIntern(queueId,space->externId,queueIndex); + msgQueueProtLock(space->externId,queueIndex); + queue = msgQueueOpen(queueId); - // 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; + // 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); + msgQueueElemCreate(newElemId,queueId,queue->elemCounter); + // ouvrir l'element + queueElem=msgQueueElemOpen(newElemId); - //ajouter le message a la bonne file... -msgQueueElemAdd(queue,newElemId); + // modifier les index pour retrouver le buffer + queueElem->poolIndex=poolIndex; + queueElem->bufferIndex=bufferIndex; + + // fermer l'element + msgQueueElemClose(queueElem); - // fermer la file - msgQueueClose(queue); - msgQueueProtUnlock(space->externId,queueIndex); + //ajouter le message a la bonne file... + msgQueueElemAdd(queue,newElemId); - msgPoolDataTabClose(space,poolDataTabAddr); - /* msgPoolDataTabUnlock(space->id); - */ - msgQueueReadUnlock(space->externId,queueIndex); - return 0; + // 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; + return -1; }