RE: [HACKERS] backend freezeing on win32 fixed (I hope ;-) )

Поиск
Список
Период
Сортировка
От Hiroshi Inoue
Тема RE: [HACKERS] backend freezeing on win32 fixed (I hope ;-) )
Дата
Msg-id 000301bee90a$95d40f00$2801007e@cadzone.tpf.co.jp
обсуждение исходный текст
Ответ на RE: [HACKERS] backend freezeing on win32 fixed (I hope ;-) )  (Horak Daniel <horak@mmp.plzen-city.cz>)
Ответы Re: [HACKERS] backend freezeing on win32 fixed (I hope ;-) )  (Bruce Momjian <maillist@candle.pha.pa.us>)
Список pgsql-hackers
> -----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
gestiondes 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
gestiondes 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
gestiondes semaphores        */ /************************************************************************/
 
***************
*** 79,84 ****
--- 94,100 ---- {  int LRet ;

+  init_globals();  if( GFirstMsg == 0 )  {   if( IsGSemMsgExist() )



В списке pgsql-hackers по дате отправления:

Предыдущее
От: "Ross J. Reedstrom"
Дата:
Сообщение: Re: [HACKERS] getting at the actual int4 value of an abstime
Следующее
От: "D'Arcy" "J.M." Cain
Дата:
Сообщение: Re: [HACKERS] Re: [CORE] Re: tomorrow