*** empty log message ***
This commit is contained in:
parent
53d08b99df
commit
b6f07d0e1e
3 changed files with 47 additions and 2 deletions
36
src/nzg_bufferInit.c
Normal file
36
src/nzg_bufferInit.c
Normal file
|
@ -0,0 +1,36 @@
|
|||
#include "libnazgul.h"
|
||||
|
||||
int msgBufferInit(msgPoolData * poolDataTabAddr,int poolIndex){
|
||||
msgBufferInfoTabId bufferInfoTabId;
|
||||
int bufferInfoTabFd;
|
||||
msgBufferInfo * bufferInfoTabAddr;
|
||||
int bufferInfoNb;
|
||||
int bufferFreeIndex;
|
||||
|
||||
//récuperer l'ID du BufferInfoTab;
|
||||
strcpy(bufferInfoTabId, poolDataTabAddr[poolIndex].bufferInfoTabId);
|
||||
|
||||
bufferInfoTabFd=shm_open(bufferInfoTabId,O_RDWR,SHM_DEFAULT_MODE);
|
||||
if (bufferInfoTabFd<0){
|
||||
perror("shm_open");
|
||||
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);
|
||||
|
||||
int i=0;
|
||||
while ((i<bufferInfoNb)
|
||||
&& (bufferInfoTabAddr[i].ownerPid != (pid_t)-1)){ i++; }
|
||||
if (i == bufferInfoNb){ return -1; }
|
||||
bufferFreeIndex=i;
|
||||
|
||||
if (munmap(bufferInfoTabAddr,bufferInfoNb*sizeof(msgBufferInfo))< 0)
|
||||
{ perror("munmap"); return -1; }
|
||||
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
|
@ -13,6 +13,8 @@ typedef char msgSpaceListElemId[4*MSGSPACE_ID_LEN];
|
|||
typedef char msgPoolDataTabId[4*MSGSPACE_ID_LEN];
|
||||
typedef char msgPoolDataTabSemId[4*MSGSPACE_ID_LEN];
|
||||
|
||||
typedef char msgBufferInfoTabId[4*MSGSPACE_ID_LEN];
|
||||
|
||||
typedef char msgPoolId[4*MSGSPACE_ID_LEN];
|
||||
typedef char msgPoolSemId[4*MSGSPACE_ID_LEN];
|
||||
|
||||
|
@ -26,12 +28,17 @@ typedef struct MsgPool {
|
|||
int bufferNb;
|
||||
} msgPool;
|
||||
|
||||
typedef struct MsgBufferInfo {
|
||||
pid_t ownerPid;
|
||||
void * addr;
|
||||
} msgBufferInfo;
|
||||
|
||||
typedef struct MsgPoolData {
|
||||
msgPoolId id;
|
||||
msgBufferInfoTabId bufferInfoTabId;
|
||||
int bufferNb;
|
||||
int bufferSize;
|
||||
int allocDispBuffer;
|
||||
sem_t * allocOverload;
|
||||
} msgPoolData;
|
||||
|
||||
/* TODO: queueId */
|
||||
|
|
|
@ -12,7 +12,9 @@ int msgPoolCreate(msgSpaceId spaceId, int poolIdx, int buffNb, int buffSize);
|
|||
msgSpace *msgSpaceCreate(msgSpaceId spaceId, int queueNb, int poolNb, msgPool *poolInfos);
|
||||
msgSpace *msgSpaceOpen(msgSpaceId spaceId);
|
||||
int msgSpaceDelete(msgSpaceId spaceId);
|
||||
/* src/nzg_state.c */
|
||||
/* src/nzg_buffer.c */
|
||||
int msgBufferGetFreeIndex(msgPoolData * poolDataTab, int poolIndex);
|
||||
int msgBufferAttachProc(msgPoolData * poolDataTab, int poolIndex, void *addr);
|
||||
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue