From: Horák Daniel <horak@sit.plzen-city.cz>
To: "'Charles S. Wilson'" <cwilson@ece.gatech.edu>
Cc: cygwin@sourceware.cygnus.com
Subject: RE: Is there an alternative download site for IPC package?
Date: Thu, 17 Feb 2000 05:06:00 -0000 [thread overview]
Message-ID: <F4A9A276019AD311B08C00A024B2517005886E@exchange.mmp.plzen-city.cz> (raw)
[-- Attachment #1: Type: text/plain, Size: 519 bytes --]
> I've also mirrored it at http://cygutils.netpedia.net/ . My
> version has a few extra patches added -- for instance, the
> missing ftok() was shamelessly copied from glibc-2.1.2 --
> but has had very little testing.
Can you apply also the included patch? It was developed by some PostgreSQL
hackers (details can be found in pgsql-hackers mailing list) and corrects
the behaviour of the original version (which used some variables
uninitialized, etc). And I think the version number could be taken to 1.04.
Dan
[-- Attachment #2: cypipc.patch --]
[-- Type: text/x-diff, Size: 7996 bytes --]
*** ./ipc-daemon.c.orig Tue Dec 01 00:04:24 1998
--- ./ipc-daemon.c Fri Sep 24 13:34:16 1999
***************
*** 270,285 ****
{
itoa(100*id+Index, LBuff) ;
LHandle = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, LBuff) ;
! while (LAdrSem->current_nb[id].current_nb[Index] > 0 )
! {
! WaitForSingleObject(LHandle, 0) ;
! LAdrSem->current_nb[id].current_nb[Index]-- ;
! }
! CloseHandle(LHandle) ;
}
LAdrSem->semary[id] = IPC_UNUSED ;
LAdrSem->state[id] = 0 ;
}
else
{
for (Index = 0; Index < sma->sem_nsems; Index++)
--- 270,284 ----
{
itoa(100*id+Index, LBuff) ;
LHandle = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, LBuff) ;
! while (WaitForSingleObject(LHandle, 0) == WAIT_OBJECT_0)
! ;
! LAdrSem->current_nb[id].current_nb[Index] = 0;
! CloseHandle(LHandle) ;
}
LAdrSem->semary[id] = IPC_UNUSED ;
LAdrSem->state[id] = 0 ;
}
+ /*
else
{
for (Index = 0; Index < sma->sem_nsems; Index++)
***************
*** 288,293 ****
--- 287,293 ----
LHandle = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, LBuff) ;
}
}
+ */
}
}
*** ./msg.c.orig Tue Dec 01 00:16:09 1998
--- ./msg.c Fri Sep 17 12:50:50 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() )
*** ./sem.c.orig Tue Dec 01 00:16:25 1998
--- ./sem.c Fri Sep 17 12:47:11 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() )
***************
*** 187,193 ****
{
CloseHandle ( LHandle ) ;
}
! LHandle = CreateSemaphore(NULL, 0, 0x7FFFFFFF, LBuff) ;
if( LHandle == NULL )
{
printf( "Creation de Semaphore \"Sem\" impossible\n" ) ;
--- 203,209 ----
{
CloseHandle ( LHandle ) ;
}
! LHandle = CreateSemaphore(NULL, 0, 1, LBuff) ;
if( LHandle == NULL )
{
printf( "Creation de Semaphore \"Sem\" impossible\n" ) ;
***************
*** 357,371 ****
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) ;
--- 373,386 ----
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) ;
***************
*** 375,390 ****
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() ;
}
}
--- 390,407 ----
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() ;
}
}
***************
*** 435,441 ****
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)
--- 452,457 ----
***************
*** 568,589 ****
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);
--- 584,591 ----
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);
*** ./shm.c.orig Fri Sep 17 12:46:24 1999
--- ./shm.c Fri Sep 17 12:47:11 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() )
next reply other threads:[~2000-02-17 5:06 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2000-02-17 5:06 Horák Daniel [this message]
2000-02-17 11:50 ` Charles S. Wilson
-- strict thread matches above, loose matches on Subject: below --
2000-02-17 8:10 Fifer, Eric
2000-02-17 11:51 ` Charles S. Wilson
2000-02-16 6:34 Horák Daniel
2000-02-16 6:24 Ferenc Habony
2000-02-16 10:50 ` Charles S. Wilson
2000-01-26 17:24 Brian K. Smith
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=F4A9A276019AD311B08C00A024B2517005886E@exchange.mmp.plzen-city.cz \
--to=horak@sit.plzen-city.cz \
--cc=cwilson@ece.gatech.edu \
--cc=cygwin@sourceware.cygnus.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).