Thread
-
RE: [HACKERS] backend freezeing on win32 fixed (I hope ;-) )
Horak Daniel <horak@mmp.plzen-city.cz> — 1999-08-17T12:06:26Z
> In any case, when one backend quits and another one is > started, the new > one will re-use the semaphore no longer used by the defunct backend. I have tested my solution a bit more and I have to say that reusing a semaphore by a new backend works OK. But it is not possible for a newly created backend to use a semaphore allocated by postmaster (it freezes on test if the semaphore with given key already exists - done with semId=semget(semKey, 0, 0) in function IpcSemaphoreCreate() in storage/ipc/ipc.c ). Why it is, I don't know, but it seems that my solution uses the ipc library in the right way. There are no longer any error messages from the ipc library when running the server. And I can't say that the ipc library is a 100% correct implementation of SysV IPC, it is probably (sure ;-) )caused by the Windows internals. Dan
-
Re: [HACKERS] backend freezeing on win32 fixed (I hope ;-) )
Bruce Momjian <maillist@candle.pha.pa.us> — 1999-08-17T14:41:28Z
[Charset iso-8859-1 unsupported, filtering to ASCII...] > > In any case, when one backend quits and another one is > > started, the new > > one will re-use the semaphore no longer used by the defunct backend. > > I have tested my solution a bit more and I have to say that reusing a > semaphore by a new backend works OK. But it is not possible for a newly > created backend to use a semaphore allocated by postmaster (it freezes on > test if the semaphore with given key already exists - done with > semId=semget(semKey, 0, 0) in function IpcSemaphoreCreate() in > storage/ipc/ipc.c ). Why it is, I don't know, but it seems that my solution > uses the ipc library in the right way. There are no longer any error > messages from the ipc library when running the server. And I can't say that > the ipc library is a 100% correct implementation of SysV IPC, it is probably > (sure ;-) )caused by the Windows internals. Seems we may have to use the patch, or make some other patch for NT-only that works around this NT bug. -- 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
-
RE: [HACKERS] backend freezeing on win32 fixed (I hope ;-) )
Hiroshi Inoue <inoue@tpf.co.jp> — 1999-08-17T23:45:28Z
> -----Original Message----- > From: owner-pgsql-hackers@postgreSQL.org > [mailto:owner-pgsql-hackers@postgreSQL.org]On Behalf Of Horak Daniel > Sent: Tuesday, August 17, 1999 9:06 PM > To: 'Tom Lane' > Cc: 'pgsql-hackers@postgreSQL.org' > Subject: RE: [HACKERS] backend freezeing on win32 fixed (I hope ;-) ) > > > > In any case, when one backend quits and another one is > > started, the new > > one will re-use the semaphore no longer used by the defunct backend. > > I have tested my solution a bit more and I have to say that reusing a > semaphore by a new backend works OK. But it is not possible for a newly > created backend to use a semaphore allocated by postmaster (it freezes on > test if the semaphore with given key already exists - done with > semId=semget(semKey, 0, 0) in function IpcSemaphoreCreate() in > storage/ipc/ipc.c ). Why it is, I don't know, but it seems that > my solution > uses the ipc library in the right way. There are no longer any error > messages from the ipc library when running the server. And I > can't say that > the ipc library is a 100% correct implementation of SysV IPC, it > is probably > (sure ;-) )caused by the Windows internals. > Yutaka Tanida [yutaka@marin.or.jp] and I have examined IPC library. We found that postmaster doesn't call exec() after fork() since v6.4. The value of static/extern variables which cygipc library holds may be different from their initial values when postmaster fork()s child backend processes. I made the following patch for cygipc library on trial. This patch was effective for Yutaka's test case. Regards. Hiroshi Inoue Inoue@tpf.co.jp *** sem.c.orig Tue Dec 01 00:16:25 1998 --- sem.c Tue Aug 17 13:22:06 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() ) *** shm.c.orig Tue Dec 01 01:04:57 1998 --- shm.c Tue Aug 17 13:22:27 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() ) *** msg.c.orig Tue Dec 01 00:16:09 1998 --- msg.c Tue Aug 17 13:20:04 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() ) -
Re: [HACKERS] backend freezeing on win32 fixed (I hope ;-) )
Bruce Momjian <maillist@candle.pha.pa.us> — 1999-09-27T18:32:34Z
I have added this to the end of the README.NT file. [Charset iso-8859-1 unsupported, filtering to ASCII...] > > -----Original Message----- > > From: owner-pgsql-hackers@postgreSQL.org > > [mailto:owner-pgsql-hackers@postgreSQL.org]On Behalf Of Horak Daniel > > Sent: Tuesday, August 17, 1999 9:06 PM > > To: 'Tom Lane' > > Cc: 'pgsql-hackers@postgreSQL.org' > > Subject: RE: [HACKERS] backend freezeing on win32 fixed (I hope ;-) ) > > > > > > > In any case, when one backend quits and another one is > > > started, the new > > > one will re-use the semaphore no longer used by the defunct backend. > > > > I have tested my solution a bit more and I have to say that reusing a > > semaphore by a new backend works OK. But it is not possible for a newly > > created backend to use a semaphore allocated by postmaster (it freezes on > > test if the semaphore with given key already exists - done with > > semId=semget(semKey, 0, 0) in function IpcSemaphoreCreate() in > > storage/ipc/ipc.c ). Why it is, I don't know, but it seems that > > my solution > > uses the ipc library in the right way. There are no longer any error > > messages from the ipc library when running the server. And I > > can't say that > > the ipc library is a 100% correct implementation of SysV IPC, it > > is probably > > (sure ;-) )caused by the Windows internals. > > > > Yutaka Tanida [yutaka@marin.or.jp] and I have examined IPC > library. > > We found that postmaster doesn't call exec() after fork() since v6.4. > > The value of static/extern variables which cygipc library holds may > be different from their initial values when postmaster fork()s child > backend processes. > > I made the following patch for cygipc library on trial. > This patch was effective for Yutaka's test case. > > Regards. > > Hiroshi Inoue > Inoue@tpf.co.jp > > *** sem.c.orig Tue Dec 01 00:16:25 1998 > --- sem.c Tue Aug 17 13:22:06 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() ) > *** shm.c.orig Tue Dec 01 01:04:57 1998 > --- shm.c Tue Aug 17 13:22:27 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() ) > *** msg.c.orig Tue Dec 01 00:16:09 1998 > --- msg.c Tue Aug 17 13:20:04 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() ) > > > -- 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