diff --git a/src/nzg_allocate.c b/src/nzg_allocate.c index 1ad73a5..f509af0 100644 --- a/src/nzg_allocate.c +++ b/src/nzg_allocate.c @@ -73,12 +73,14 @@ void * msgAllocate(msgSpace *space, msgPoolSemIdIntern(ressourceSemId,space->id,i); ressourceSemFd = sem_open(ressourceSemId,O_CREAT,SEM_DEFAULT_MODE,0); if (ressourceSemFd == SEM_FAILED){ - perror("sem_open"); return NULL; + NZG_ERROR("sem_open",ressourceSemId); + return NULL; } /* on remplit le tableau avec les valeurs des semaphores */ if (sem_getvalue(ressourceSemFd, ressourceSemVal) < 0){ - perror("sem_getvalue"); return NULL; + NZG_ERROR("sem_getvalue",ressourceSemId); + return NULL; } if ((*ressourceSemVal) < 0){ @@ -95,7 +97,8 @@ void * msgAllocate(msgSpace *space, break; } if( sem_close(ressourceSemFd) <0){ - perror("sem_getvalue"); return NULL; + NZG_ERROR("sem_getvalue",ressourceSemId); + return NULL; } } // if buffSize > taille } // for @@ -129,13 +132,13 @@ void * msgAllocate(msgSpace *space, msgPoolSemIdIntern(ressourceSemId,space->id,selectedPoolIndex); ressourceSemFd=sem_open(ressourceSemId,O_CREAT,SEM_DEFAULT_MODE,0); if(ressourceSemFd==SEM_FAILED){ - perror("sem_open"); + NZG_ERROR("sem_open",ressourceSemId); return NULL; } } if (sem_wait(ressourceSemFd) < 0){ - perror("sem_wait"); + NZG_ERROR("sem_wait",ressourceSemId); sem_close(ressourceSemFd); return NULL; } diff --git a/src/nzg_bufferAttachProc.c b/src/nzg_bufferAttachProc.c index 8e81bc5..9f83c90 100644 --- a/src/nzg_bufferAttachProc.c +++ b/src/nzg_bufferAttachProc.c @@ -16,7 +16,7 @@ int msgBufferAttachProc( bufferInfoTabFd=shm_open(bufferInfoTabId,O_RDWR,SHM_DEFAULT_MODE); if (bufferInfoTabFd<0){ - perror("shm_open"); + NZG_ERROR("sem_open",bufferInfoTabId); return -1; } @@ -29,7 +29,9 @@ int msgBufferAttachProc( bufferInfoTabAddr[bufferIndex].addr = addr; if (munmap(bufferInfoTabAddr,bufferInfoNb*sizeof(msgBufferInfo))< 0) - { perror("munmap"); return -1; } + { + NZG_ERROR("munmap",bufferInfoTabId); + return -1; } return 0; } diff --git a/src/nzg_bufferDetachProc.c b/src/nzg_bufferDetachProc.c index 24b26a4..5b1572e 100644 --- a/src/nzg_bufferDetachProc.c +++ b/src/nzg_bufferDetachProc.c @@ -16,7 +16,7 @@ int msgBufferDetachProc( bufferInfoTabFd=shm_open(bufferInfoTabId,O_RDWR,SHM_DEFAULT_MODE); if (bufferInfoTabFd<0){ - perror("shm_open"); + NZG_ERROR("shm_open",bufferInfoTabId); return -1; } @@ -29,7 +29,10 @@ int msgBufferDetachProc( bufferInfoTabAddr[bufferIndex].addr = NULL; if (munmap(bufferInfoTabAddr,bufferInfoNb*sizeof(msgBufferInfo))< 0) - { perror("munmap"); return -1; } + { + NZG_ERROR("munmap",bufferInfoTabId); + return -1; + } return 0; } diff --git a/src/nzg_bufferGetFreeIndex.c b/src/nzg_bufferGetFreeIndex.c index 4a0f9d3..7d698f8 100644 --- a/src/nzg_bufferGetFreeIndex.c +++ b/src/nzg_bufferGetFreeIndex.c @@ -8,11 +8,12 @@ int bufferInfoNb; int bufferFreeIndex; //récuperer l'ID du BufferInfoTab; + printf("=>%s<=\n",poolDataTabAddr[poolIndex].bufferInfoTabId); strcpy(bufferInfoTabId, poolDataTabAddr[poolIndex].bufferInfoTabId); bufferInfoTabFd=shm_open(bufferInfoTabId,O_RDWR,SHM_DEFAULT_MODE); if (bufferInfoTabFd<0){ - perror("shm_open"); + NZG_ERROR("shm_open",bufferInfoTabId); return -1; } @@ -28,7 +29,10 @@ int bufferFreeIndex; bufferFreeIndex=i; if (munmap(bufferInfoTabAddr,bufferInfoNb*sizeof(msgBufferInfo))< 0) - { perror("munmap"); return -1; } + { + NZG_ERROR("munmap",bufferInfoTabId); + return -1; + } return bufferFreeIndex; } diff --git a/src/nzg_bufferInfoTabCreate.c b/src/nzg_bufferInfoTabCreate.c index e33293f..6d716da 100644 --- a/src/nzg_bufferInfoTabCreate.c +++ b/src/nzg_bufferInfoTabCreate.c @@ -1,8 +1,37 @@ +#include "libnazgul.h" +#include "nzg_ids.h" + int msgBufferInfoTabCreate( - msgSpaceId externId, - int poolIdx, - int buffNb) { - - bufferInfoTabInit(poolIdx); - return -1; + msgSpaceId externId, + msgPoolData * poolDataTabAddr, + int poolIdx, + int bufferNb) { + + int bufferInfoTabFd; + msgBufferInfoTabId bufferInfoTabId; + + /* creation des infos sur buffers DEBUT */ + if (msgBufferInfoTabIdIntern(bufferInfoTabId,externId,poolIdx) == -1){ + NZG_ERROR("msgPoolId creation",bufferInfoTabId); + return -1; + } + + bufferInfoTabFd=shm_open(bufferInfoTabId,O_RDWR|O_CREAT|O_EXCL|O_TRUNC,MSGSPACE_DEFAULT_MODE); + if (bufferInfoTabFd == -1 ) { + fprintf( stderr, "msgInfoTab : %s creation failed: %s\n",bufferInfoTabId, + strerror( errno ) ); + return -1; + } + if (ftruncate(bufferInfoTabFd, bufferNb*sizeof(msgBufferInfo)) == -1){ + fprintf( stderr, "msgBufferInfoTab resizing failed: %s\n", + strerror( errno ) ); + return -1; + } + close(bufferInfoTabFd); + /* creation des infos sur buffers FIN */ + + msgBufferInfoTabInit(poolDataTabAddr,poolIdx); + + return -1;NZG_ERROR("munmap",bufferInfoTabId); + return -1; } diff --git a/src/nzg_bufferInfoTabInit.c b/src/nzg_bufferInfoTabInit.c index 38fb8d8..2d3e373 100644 --- a/src/nzg_bufferInfoTabInit.c +++ b/src/nzg_bufferInfoTabInit.c @@ -1,6 +1,6 @@ #include "libnazgul.h" -int msgBufferInit(msgPoolData * poolDataTabAddr,int poolIndex){ +int msgBufferInfoTabInit(msgPoolData * poolDataTabAddr,int poolIndex){ msgBufferInfoTabId bufferInfoTabId; int bufferInfoTabFd; msgBufferInfo * bufferInfoTabAddr; @@ -8,17 +8,19 @@ int bufferInfoNb; //récuperer l'ID du BufferInfoTab; strcpy(bufferInfoTabId, poolDataTabAddr[poolIndex].bufferInfoTabId); - + + printf("msgBufferInfoTabId %d open >>%s<<\n",poolIndex,bufferInfoTabId); bufferInfoTabFd=shm_open(bufferInfoTabId,O_RDWR,SHM_DEFAULT_MODE); if (bufferInfoTabFd<0){ - perror("shm_open"); + NZG_ERROR("msgBufferInfoTabId open",bufferInfoTabId); return -1; } /** on regarde dans le tableau d'infos de buffer **/ bufferInfoNb=poolDataTabAddr[poolIndex].bufferNb; bufferInfoTabAddr=mmap(NULL,bufferInfoNb*sizeof(msgBufferInfo), - PROT_READ,MAP_SHARED,bufferInfoTabFd,(off_t)0); + PROT_WRITE|PROT_READ,MAP_SHARED,bufferInfoTabFd,(off_t)0); + printf("fd ?\n"); fflush(stdout); int i; for (i=0;iid,nzgId,MSGSPACE_ID_LEN); + strncpy(mSAddr->id,externId,MSGSPACE_ID_LEN); mSAddr->poolNb=poolNb; mSAddr->queueNb=queueNb; mSAddr->pid=getpid(); /* creation du poolData */ - msgPoolDataIdIntern(poolDataTabId,spaceId); + msgPoolDataIdIntern(poolDataTabId,externId); strcpy(mSAddr->poolDataTabId,poolDataTabId); mSPoolDataFd=shm_open( @@ -125,14 +124,22 @@ msgSpace * msgSpaceCreate( mSPoolDataAddr[i].bufferSize=poolInfos[i].bufferSize; mSPoolDataAddr[i].allocDispBuffer=0; - msgPoolId poolId; - if (msgPoolIdIntern(poolId,spaceId,i) == -1){ + if (msgBufferInfoTabIdIntern(bufferInfoTabId,externId,i) == -1){ + fprintf( stderr, "msgBufferInfoTabId creation failed for id %s\n", + (char*)poolId ); + return NULL; + } + strcpy(mSPoolDataAddr[i].bufferInfoTabId,bufferInfoTabId); + printf("buffIfoTab %d name : %s\n",i,mSPoolDataAddr[i].bufferInfoTabId); + msgBufferInfoTabCreate(externId,mSPoolDataAddr,i,poolInfos[i].bufferNb); + + if (msgPoolIdIntern(poolId,externId,i) == -1){ fprintf( stderr, "msgPoolId creation failed for id %s\n", (char*)poolId ); return NULL; } - msgPoolCreate(spaceId,i,poolInfos[i].bufferNb,poolInfos[i].bufferSize); strcpy(mSPoolDataAddr[i].id,poolId); + msgPoolCreate(externId,i,poolInfos[i].bufferNb,poolInfos[i].bufferSize); } diff --git a/test/create_delete.c b/test/create_delete.c index da62b63..5ca435b 100644 --- a/test/create_delete.c +++ b/test/create_delete.c @@ -8,17 +8,21 @@ int main(void) { msgSpaceId testId; msgSpace * mSPAC; msgPool poolInfos[2]; + char * montext; poolInfos[0].bufferNb=4; poolInfos[0].bufferSize=200; - poolInfos[1].bufferNb=1; - poolInfos[1].bufferSize=700; + poolInfos[1].bufferNb=5; + poolInfos[1].bufferSize=250; strcpy(testId,"test"); printf("RequestedId: %s\n",testId); mSPAC=msgSpaceCreate(testId,0,2,poolInfos); + + montext=msgAllocate(mSPAC,1,200,0); + msgSpaceDelete(testId); return 0;