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

From: Bruce Momjian <maillist(at)candle(dot)pha(dot)pa(dot)us>
To: Hiroshi Inoue <Inoue(at)tpf(dot)co(dot)jp>
Cc: Horak Daniel <horak(at)mmp(dot)plzen-city(dot)cz>, "'Tom Lane'" <tgl(at)sss(dot)pgh(dot)pa(dot)us>, pgsql-hackers(at)postgreSQL(dot)org
Subject: Re: [HACKERS] backend freezeing on win32 fixed (I hope ;-) )
Date: 1999-09-27 18:32:34
Message-ID: 199909271832.OAA11226@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(at)postgreSQL(dot)org
> > [mailto:owner-pgsql-hackers(at)postgreSQL(dot)org]On Behalf Of Horak Daniel
> > Sent: Tuesday, August 17, 1999 9:06 PM
> > To: 'Tom Lane'
> > Cc: 'pgsql-hackers(at)postgreSQL(dot)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(at)marin(dot)or(dot)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(at)tpf(dot)co(dot)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(at)candle(dot)pha(dot)pa(dot)us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Bruce Momjian 1999-09-27 18:33:06 Re: [HACKERS] vacuum process size
Previous Message Bruce Momjian 1999-09-27 18:21:23 Re: [HACKERS] 6.5.2