From: Adrian S. <a3s...@us...> - 2005-06-14 11:42:16
|
Update of /cvsroot/sblim/sfcb In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1215 Modified Files: httpAdapter.c msgqueue.c sfcBroker.c Log Message: sfcbd now removes ipcs semphores when terminating. Index: sfcBroker.c =================================================================== RCS file: /cvsroot/sblim/sfcb/sfcBroker.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- sfcBroker.c 7 Jun 2005 12:52:17 -0000 1.14 +++ sfcBroker.c 14 Jun 2005 11:42:04 -0000 1.15 @@ -138,7 +138,8 @@ static pthread_mutex_t sdMtx=PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t sdCnd=PTHREAD_COND_INITIALIZER; static int stopping=0; - +extern int remSem(); + static void stopBroker(void *p) { struct timespec waitTime; @@ -173,6 +174,7 @@ } if (providersStopped) break; } + remSem(); if (restartBroker) { char *emsg=strerror(errno); Index: httpAdapter.c =================================================================== RCS file: /cvsroot/sblim/sfcb/httpAdapter.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- httpAdapter.c 13 Jun 2005 12:50:33 -0000 1.10 +++ httpAdapter.c 14 Jun 2005 11:42:04 -0000 1.11 @@ -111,9 +111,10 @@ if ((httpProcSem=semget(httpProcSemKey,1,0666))!=-1) semctl(httpProcSem,0,IPC_RMID,sun); - if ((httpProcSem=semget(httpProcSemKey,1+p,IPC_CREAT | 0666))==-1) { + if ((httpProcSem=semget(httpProcSemKey,1+p,IPC_CREAT | IPC_EXCL | 0666))==-1) { char *emsg=strerror(errno); - mlogf(M_ERROR,M_SHOW,"--- Http Proc semaphore create %d: %s\n",currentProc,emsg); + mlogf(M_ERROR,M_SHOW,"\n--- Http Proc semaphore create key: 0x%x failed: %s\n",httpProcSemKey,emsg); + mlogf(M_ERROR,M_SHOW," use \"ipcrm -S 0x%x\" to remove semaphore\n\n",httpProcSemKey); abort(); } sun.val=p; @@ -126,15 +127,23 @@ if ((httpWorkSem=semget(httpWorkSemKey,1,0666))!=-1) semctl(httpWorkSem,0,IPC_RMID,sun); - if ((httpWorkSem=semget(httpWorkSemKey,1,IPC_CREAT | 0666))==-1) { + if ((httpWorkSem=semget(httpWorkSemKey,1,IPC_CREAT | IPC_EXCL | 0666))==-1) { char *emsg=strerror(errno); - mlogf(M_ERROR,M_SHOW,"--- Http ProcWork semaphore create %d: %s\n",currentProc,emsg); + mlogf(M_ERROR,M_SHOW,"\n--- Http ProcWork semaphore create key: 0x%x failed: %s\n",httpWorkSemKey,emsg); + mlogf(M_ERROR,M_SHOW," use \"ipcrm -S 0x%x\" to remove semaphore\n\n",httpProcSemKey); abort(); } sun.val=1; semctl(httpWorkSem,0,SETVAL,sun); } +int remProcCtl() +{ + semctl(httpProcSem,0,IPC_RMID,0); + semctl(httpWorkSem,0,IPC_RMID,0); + return 0; +} + int baValidate(char *cred, char **principle) { char *auth,*pw; @@ -940,6 +949,8 @@ close(connFd); } + remProcCtl(); + // printf("--- %s draining %d\n",processName,running); for (;;) { if (running==0) { Index: msgqueue.c =================================================================== RCS file: /cvsroot/sblim/sfcb/msgqueue.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- msgqueue.c 28 Apr 2005 00:18:43 -0000 1.6 +++ msgqueue.c 14 Jun 2005 11:42:04 -0000 1.7 @@ -121,7 +121,8 @@ if ((sfcbSem=semget(sfcbSemKey,4+(provs*3)+3,IPC_CREAT | IPC_EXCL | 0666))==-1) { char *emsg=strerror(errno); - mlogf(M_ERROR,M_SHOW,"SFCB semaphore create %d: %s\n",currentProc,emsg); + mlogf(M_ERROR,M_SHOW,"\n--- SFCB semaphore create key: 0x%x failed: %s\n",sfcbSemKey,emsg); + mlogf(M_ERROR,M_SHOW," use \"ipcrm -S 0x%x\" to remove semaphore\n\n",sfcbSemKey); abort(); } @@ -144,6 +145,11 @@ return 0; } +int remSem() +{ + return semctl(sfcbSem,0,IPC_RMID,0); +} + MsgSegment setCharsMsgSegment(char *str) { MsgSegment s; |