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

Поиск
Список
Период
Сортировка
От Bruce Momjian
Тема Re: [HACKERS] backend freezeing on win32 fixed (I hope ;-) )
Дата
Msg-id 199909271832.OAA11226@candle.pha.pa.us
обсуждение исходный текст
Ответ на RE: [HACKERS] backend freezeing on win32 fixed (I hope ;-) )  ("Hiroshi Inoue" <Inoue@tpf.co.jp>)
Список pgsql-hackers
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,
Pennsylvania19026
 


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

Предыдущее
От: Bruce Momjian
Дата:
Сообщение: Re: [HACKERS] vacuum process size
Следующее
От: wieck@debis.com (Jan Wieck)
Дата:
Сообщение: RI status report #1