Re: [PORTS] ipc-daemon patch for NT - Mailing list pgsql-ports
From | Bruce Momjian |
---|---|
Subject | Re: [PORTS] ipc-daemon patch for NT |
Date | |
Msg-id | 199912291028.FAA26396@candle.pha.pa.us Whole thread Raw |
In response to | ipc-daemon patch for NT ("Alexei Zakharov" <A.S.Zakharov@inp.nsk.su>) |
List | pgsql-ports |
[Charset koi8-r unsupported, filtering to ASCII...] > Hello, > > The file doc/README.NT says about ipc-daemon > > ... > 3. Apply the patch pgsql/src/win32/ipc.patch to the cygipc sources > before compiling the library. > ... > > The problem is I can't find ipc.patch there. I woudn't worry if I didn't notice in TaskManager that ipc-daemon infinitelyincreases the number of handles sometimes. > > Regards, > Alexei. For some strange reason, the patch was not distributed as part of 6.5.*. I have moved the patch into README.NT, where it belongs. The web page will also have this updated README.NT. Patch attached. --------------------------------------------------------------------------- *** ./ipc-daemon.c.orig Tue Dec 01 00:04:24 1998 --- ./ipc-daemon.c Fri Sep 24 13:34:16 1999 *************** *** 270,285 **** { itoa(100*id+Index, LBuff) ; LHandle = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, LBuff) ; ! while (LAdrSem->current_nb[id].current_nb[Index] > 0 ) ! { ! WaitForSingleObject(LHandle, 0) ; ! LAdrSem->current_nb[id].current_nb[Index]-- ; ! } ! CloseHandle(LHandle) ; } LAdrSem->semary[id] = IPC_UNUSED ; LAdrSem->state[id] = 0 ; } else { for (Index = 0; Index < sma->sem_nsems; Index++) --- 270,284 ---- { itoa(100*id+Index, LBuff) ; LHandle = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, LBuff) ; ! while (WaitForSingleObject(LHandle, 0) == WAIT_OBJECT_0) ! ; ! LAdrSem->current_nb[id].current_nb[Index] = 0; ! CloseHandle(LHandle) ; } LAdrSem->semary[id] = IPC_UNUSED ; LAdrSem->state[id] = 0 ; } + /* else { for (Index = 0; Index < sma->sem_nsems; Index++) *************** *** 288,293 **** --- 287,293 ---- LHandle = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, LBuff) ; } } + */ } } *** ./msg.c.orig Tue Dec 01 00:16:09 1998 --- ./msg.c Fri Sep 17 12:50:50 1999 *************** *** 57,62 **** --- 57,77 ---- static int GFirstMsg = 0; /*PCPC*/ static int GFdMsg ; /*PCPC*/ + /*****************************************/ + /* Initialization of static variables */ + /*****************************************/ + static pid_t GProcessId = 0; + static void init_globals(void) + { + pid_t pid; + + if (pid=getpid(), pid != GProcessId) + { + GFirstMsg = 0; + msgbytes = msghdrs = msg_seq = used_queues = max_msqid = 0; + GProcessId = pid; + } + } /************************************************************************/ /* Demande d'acces a la zone partagee de gestion des semaphores */ /************************************************************************/ *************** *** 79,84 **** --- 94,100 ---- { int LRet ; + init_globals(); if( GFirstMsg == 0 ) { if( IsGSemMsgExist() ) *** ./sem.c.orig Tue Dec 01 00:16:25 1998 --- ./sem.c Fri Sep 17 12:47:11 1999 *************** *** 58,63 **** --- 58,78 ---- static int GFirstSem = 0; /*PCPC*/ static int GFdSem ; /*PCPC*/ + static pid_t GProcessId = 0; + + static void init_globals(void) + { + pid_t pid; + + if (pid=getpid(), pid != GProcessId) + { + GFirstSem = 0; + used_sems = used_semids = max_semid = 0; + sem_seq = 0; + GProcessId = pid; + } + } + /************************************************************************/ /* Demande d'acces a la zone partagee de gestion des semaphores */ /************************************************************************/ *************** *** 77,82 **** --- 92,98 ---- { int LRet ; + init_globals(); if( GFirstSem == 0 ) { if( IsGSemSemExist() ) *************** *** 187,193 **** { CloseHandle ( LHandle ) ; } ! LHandle = CreateSemaphore(NULL, 0, 0x7FFFFFFF, LBuff) ; if( LHandle == NULL ) { printf( "Creation de Semaphore \"Sem\" impossible\n" ) ; --- 203,209 ---- { CloseHandle ( LHandle ) ; } ! LHandle = CreateSemaphore(NULL, 0, 1, LBuff) ; if( LHandle == NULL ) { printf( "Creation de Semaphore \"Sem\" impossible\n" ) ; *************** *** 357,371 **** debug_printf("do_semop : return -EACCES\n"); CYGWIN32_IPCNT_RETURN (-EACCES) ; } ! ReleaseSemaphore(LHandle, sop->sem_op, &LVal) ; ! shareadrsem->current_nb[id].current_nb[sop->sem_num] += ! sop->sem_op ; sem_deconnect() ; } else { if( sop->sem_flg == IPC_NOWAIT ) { ! LRet = WaitForSingleObject(LHandle, 0) ; ! if( LRet == WAIT_TIMEOUT ) { debug_printf("do_semop : return -EAGAIN\n"); CYGWIN32_IPCNT_RETURN (-EAGAIN) ; --- 373,386 ---- debug_printf("do_semop : return -EACCES\n"); CYGWIN32_IPCNT_RETURN (-EACCES) ; } ! shareadrsem->current_nb[id].current_nb[sop->sem_num] += ! sop->sem_op ; sem_deconnect() ; + ReleaseSemaphore(LHandle, 1 , &LVal) ; } else { if( sop->sem_flg == IPC_NOWAIT ) { ! if( sop->sem_op + shareadrsem->current_nb[id].current_nb[sop->sem_num] <0 ) { debug_printf("do_semop : return -EAGAIN\n"); CYGWIN32_IPCNT_RETURN (-EAGAIN) ; *************** *** 375,390 **** debug_printf("do_semop : return -EACCES\n"); CYGWIN32_IPCNT_RETURN (-EACCES) ; } ! shareadrsem->current_nb[id].current_nb[sop->sem_num] -= 1 ; sem_deconnect() ; } else { ! LRet = WaitForSingleObject(LHandle, INFINITE) ; if (sem_connect() == 0) { debug_printf("do_semop : return -EACCES\n"); CYGWIN32_IPCNT_RETURN (-EACCES) ; } ! shareadrsem->current_nb[id].current_nb[sop->sem_num] -= 1 ; sem_deconnect() ; } } --- 390,407 ---- debug_printf("do_semop : return -EACCES\n"); CYGWIN32_IPCNT_RETURN (-EACCES) ; } ! shareadrsem->current_nb[id].current_nb[sop->sem_num] += sop->sem_op; sem_deconnect() ; } else { ! while(sop->sem_op + shareadrsem->current_nb[id].current_nb[sop->sem_num] <0) ! LRet = WaitForSingleObject(LHandle, INFINITE) ; ! if (sem_connect() == 0) { debug_printf("do_semop : return -EACCES\n"); CYGWIN32_IPCNT_RETURN (-EACCES) ; } ! shareadrsem->current_nb[id].current_nb[sop->sem_num] += sop->sem_op ; sem_deconnect() ; } } *************** *** 435,441 **** char LBuff[100] ; HANDLE LHandle ; long LPrevious ; - int LIndex; debug_printf("semctl : semid=%X semnum=%X cmd=0x%02X arg=%p\n",semid,semnum,cmd,arg); if (semid < 0 || semnum < 0 || cmd < 0) --- 452,457 ---- *************** *** 568,589 **** if( LHandle != NULL ) { if( arg.val > shareadrsem->current_nb[id].current_nb[semnum] ) ! { ! ReleaseSemaphore(LHandle, ! arg.val-shareadrsem->current_nb[id].current_nb[semnum], ! &LPrevious) ; ! } ! else if (arg.val < ! shareadrsem->current_nb[id].current_nb[semnum] ) ! { ! for( LIndex = arg.val; ! LIndex < shareadrsem->current_nb[id].current_nb[semnum]; ! LIndex++ ) ! { ! WaitForSingleObject(LHandle, 0) ; ! } ! } ! shareadrsem->current_nb[id].current_nb[semnum] = arg.val ; } debug_printf("semctl : SETVAL : return 0\n"); CYGWIN32_IPCNT_RETURN_DECONNECT (0); --- 584,591 ---- if( LHandle != NULL ) { if( arg.val > shareadrsem->current_nb[id].current_nb[semnum] ) ! ReleaseSemaphore(LHandle,1,&LPrevious) ; ! shareadrsem->current_nb[id].current_nb[semnum] = arg.val ; } debug_printf("semctl : SETVAL : return 0\n"); CYGWIN32_IPCNT_RETURN_DECONNECT (0); *** ./shm.c.orig Fri Sep 17 12:46:24 1999 --- ./shm.c Fri Sep 17 12:47:11 1999 *************** *** 59,64 **** --- 59,81 ---- static int GFirstShm = 0; /*PCPC*/ static int GFdShm ; /*PCPC*/ + /*****************************************/ + /* Initialization of static variables */ + /*****************************************/ + static pid_t GProcessId = 0; + static void init_globals(void) + { + pid_t pid; + + if (pid=getpid(), pid != GProcessId) + { + GFirstShm = 0; + shm_rss = shm_swp = max_shmid = 0; + shm_seq = 0; + GProcessId = pid; + } + } + /************************************************************************/ /* Demande d'acces a la zone partagee de gestion des shm */ /************************************************************************/ *************** *** 82,87 **** --- 99,105 ---- { int LRet ; + init_globals(); if( GFirstShm == 0 ) { if( IsGSemShmExist() ) -- Bruce Momjian | http://www.op.net/~candle maillist@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026
pgsql-ports by date: