Re: [HACKERS] Re: IPC on win32 - additions for 6.5.2 and current trees - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: [HACKERS] Re: IPC on win32 - additions for 6.5.2 and current trees
Date
Msg-id 199909272049.QAA16695@candle.pha.pa.us
Whole thread Raw
In response to Re: IPC on win32 - additions for 6.5.2 and current trees  (yutaka tanida <yutaka@marin.or.jp>)
Responses RE: [HACKERS] Re: IPC on win32 - additions for 6.5.2 and current trees  ("Hiroshi Inoue" <Inoue@tpf.co.jp>)
List pgsql-hackers
NT folks, I assume this patch is no longer needed.


> Hi,
> 
> Daniel Horak wrote:
> 
> > Hi,
> > 
> > please add the file ipc.patch (patch for the cygipc library) into src/win32
> > directory and apply the patch for README.NT (readme.patch). I think it
> > should go into both the 6.5.2 and current trees.
> > 
> > I have no reaction from the author of the cygipc library yet, so it will be
> > better to include the patch into the sources of PostgreSQL
> 
> I propose more patch against cygipc. 
> 
> Hiroshi Inoue (inoue@tpf.co.jp) found another backend freezing problem.
> He also found semop() in cygipc can't decrement semaphore value
> correctly (Only -1 is supported).
> 
> I create follwing patch fixes these issues.
> 
> 
> I'm sorry for my poor English.
> 
> *** sem.c.orig_    Tue Aug 17 14:19:37 1999
> --- sem.c    Tue Aug 31 16:59:49 1999
> ***************
> *** 204,210 ****
>       {
>       CloseHandle ( LHandle ) ;
>       }
> !     LHandle = CreateSemaphore(NULL, 0, 0x7FFFFFFF, LBuff) ;
>       if( LHandle == NULL )
>       {
>       printf( "Creation de Semaphore \"Sem\" impossible\n" ) ;
> --- 204,210 ----
>       {
>       CloseHandle ( LHandle ) ;
>       }
> !     LHandle = CreateSemaphore(NULL, 0, 1, LBuff) ;
>       if( LHandle == NULL )
>       {
>       printf( "Creation de Semaphore \"Sem\" impossible\n" ) ;
> ***************
> *** 374,388 ****
>   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) ;
> --- 374,387 ----
>   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) ;
> ***************
> *** 392,407 ****
>   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() ;
>               }
>           }
> --- 391,408 ----
>   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() ;
>               }
>           }
> ***************
> *** 452,458 ****
>       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)
> --- 453,458 ----
> ***************
> *** 585,606 ****
>           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);
> --- 585,592 ----
>           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);
> 
> 
> 
> --
> Yutaka tanida / S34 Co., Ltd.
> tanida@s34.co.jp (Office)
> yutaka@marin.or.jp(Private, or if you *HATE* Microsoft Outlook)
> 
> 
> ************
> 
> 


--  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 by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: [HACKERS] PostgreSQL 6.5.2
Next
From: Bruce Momjian
Date:
Subject: Re: [HACKERS] PostgreSQL 6.5.2