From a501a39ba698da781e814ea40ea572435f2496f6 Mon Sep 17 00:00:00 2001 From: glenux Date: Tue, 24 Feb 2004 11:01:18 +0000 Subject: [PATCH] *** empty log message *** --- src/get.c | 11 +++++++---- src/queueReadTryLock.c | 26 ++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 src/queueReadTryLock.c diff --git a/src/get.c b/src/get.c index aa8637b..3cb7e11 100644 --- a/src/get.c +++ b/src/get.c @@ -4,6 +4,10 @@ void * msgGet(msgSpace * space,int queueIndex,int option){ void * resultAddr; + msgQueueId queueId; + msgQueue * queue; + msgQueueElemId oldElemId; + msgQueueElem * oldElem; // on teste la possibilité de lecture sur la liste... if (option == NONBLOCK){ if (msgQueueReadTryLock(space->externId,queueIndex) <0){ @@ -19,18 +23,17 @@ void * msgGet(msgSpace * space,int queueIndex,int option){ // la lecture est possible // on essaye donc de modifier la liste msgQueueProtLock(space->externId,queueIndex); - msgQueueId queueId; - msgQueue * queue; msgQueueIdIntern(queueId,space->externId,queueIndex); // ouvrir la file queue = msgQueueOpen(queueId); - msgQueueElemId oldElemId; // recupérer l'id de l'ancien element... msgQueueRem(queue, oldElemId); - msgQueueElem * oldElem; oldElem = msgQueueElemOpen(oldElemId); + + // mapper le buffer dans l'espace mémoire du processus + // attacher au buffer... // fermer la file msgQueueClose(queue); diff --git a/src/queueReadTryLock.c b/src/queueReadTryLock.c new file mode 100644 index 0000000..b3292ca --- /dev/null +++ b/src/queueReadTryLock.c @@ -0,0 +1,26 @@ +#include "libnazgul.h" +#include "ids.h" + +int msgQueueReadTryLock(msgSpaceId externId,int queueIdx){ + sem_t * queueSemFd; + msgQueueSemId queueSemId; + + msgQueueReadSemIdIntern(queueSemId,externId,queueIdx); + queueSemFd=sem_open(queueSemId,O_CREAT|O_EXCL,SEM_DEFAULT_MODE,1); + if(queueSemFd==SEM_FAILED){ + NZG_ERROR("sem_open",queueSemId); + goto ERROR; + } + + if(sem_trywait(queueSemFd)==-1){ + NZG_ERROR("sem_wait",queueSemId); + goto ERROR; + } + + sem_close(queueSemFd); + + return 0; +ERROR: + return -1; +} +