Mail Archives: cygwin/2004/08/23/14:24:59
Hi All,
I have encountered a problem which I hope someone has seen and has a
work around for. While I was porting some code that is based on POSIX
threads and SYSV message queues I found that if the receiver (i.e.
caller to msgrcv) of the message queue is a child or sibling thread of
the sender (i.e. caller to msgsnd), then the msgsnd call hangs
indefinitely even though NOWAIT is specified. If the receiver (caller to
msgrcv) is another process, then all works fine. I have included a
simple program that spawns the receiver either as a process (i.e. fork)
or as a thread (pthread_create). When fork is used, all works find. When
pthread_create is used, the send hangs. Any ideas/workarounds? I have
included the appropriate versions and I have verified that the
cygserver is running. Also after the code I have included the output
from cygcheck -s....
Thanks,
-Don
#include <stdio.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include <stdarg.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/msg.h>
static uint16_t msgQueueMasterKey = 0xAC00;
typedef enum
{
CHILD_THREAD = 1,
CHILD_PROCESS = 2
} client_mode_t;
void * doReceiveSide (void *argPtr)
{
int msgQueueId;
char msgBuffer[256];
int msgCount;
msgCount = 0;
printf ("Receiver Running...\n");
msgQueueId = msgget(msgQueueMasterKey, IPC_CREAT|0660);
while (1)
{
msgCount++;
if (msgrcv (msgQueueId, msgBuffer, sizeof(msgBuffer), 0, 0) >=
0)
{
printf ("Message %d received: %s\n",msgCount, msgBuffer);
}
else
{
printf ("Message not received: Error status returned.\n");
}
}
return NULL;
}
int main(int argc, char *argv[])
{
pthread_t threadId;
int msgQueueId;
char * msgPtr = "This is the message.";
client_mode_t clientMode;
if (argc != 2)
{
printf ("%s: usage %s <-fork | -thread>\n", argv[0], argv[0]);
return 0;
}
else
{
if (strcmp (argv[1], "-fork") == 0)
clientMode = CHILD_PROCESS;
else if (strcmp (argv[1], "-thread") == 0)
clientMode = CHILD_THREAD;
else
{
printf ("%s: usage %s <-fork | -thread>\n", argv[0]);
return 0;
}
}
printf ("Starting client thread...\n");
if (clientMode == CHILD_PROCESS)
{
if (fork() == 0) doReceiveSide(NULL);
}
else if (clientMode == CHILD_THREAD)
{
pthread_create(&threadId, NULL, doReceiveSide, (void
*)msgQueueId);
}
msgQueueId = msgget(msgQueueMasterKey, IPC_CREAT|0660);
while (1)
{
printf ("Waiting 5 seconds...\n");
fflush(stdout);
sleep(5);
printf ("Sending message on queue %d...\n",msgQueueId);
fflush(stdout);
msgsnd (msgQueueId, msgPtr, strlen(msgPtr), IPC_NOWAIT);
}
}
---------------------------------------------
cygcheck -s
Cygwin Configuration Diagnostics
Current System Time: Mon Aug 23 14:01:55 2004
Windows XP Professional Ver 5.1 Build 2600 Service Pack 1
Path: C:\cygwin\usr\local\bin
C:\cygwin\bin
C:\cygwin\bin
C:\cygwin\usr\X11R6\bin
c:\WINDOWS\system32
c:\WINDOWS
c:\WINDOWS\System32\Wbem
c:\PROGRA~1\COMMON~1\Odbc\FILEMA~1
c:\Program Files\ATI Technologies\ATI Control Panel
c:\Program Files\Rational\common
c:\Program Files\Rational\ClearCase\bin
"C
C:\cygwin\Program Files\Symantec\Norton Ghost 2003\"
c:\Program Files\Microsoft SDK\Bin\
c:\Program Files\Microsoft SDK\Bin\WinNT\
c:\Program Files\vslick\win
c:\Program Files\Microsoft SDK\Bin\
c:\Program Files\Microsoft SDK\Bin\WinNT\
c:\PROGRA~1\MICROS~2\Common\msdev98\BIN
c:\PROGRA~1\MICROS~2\VC98\BIN
c:\PROGRA~1\MICROS~2\Common\TOOLS\WINNT
c:\PROGRA~1\MICROS~2\Common\TOOLS\
C:\cygwin\bin
c:\home\dpost\ccviews\dpost_vxworks\vxworks_vob\vxworks21\Tornado\host\x
86-win32\bin
Output from C:\cygwin\bin\id.exe (nontsec)
UID: 1003(dpost) GID: 513(None)
513(None)
Output from C:\cygwin\bin\id.exe (ntsec)
UID: 1003(dpost) GID: 513(None)
544(Administrators) 545(Users)
SysDir: C:\WINDOWS\System32
WinDir: C:\WINDOWS
CYGWIN = `server'
HOME = `c:\home\dpost'
MAKE_MODE = `unix'
PWD = `/lib'
USER = `dpost'
Use `-r' to scan registry
c: hd NTFS 30004Mb 60% CP CS UN PA FC
d: cd N/A N/A
l: hd Ext2 44076Mb 50% CP CS /
x: net NTFS 134676Mb 46% CP CS PA dpost
z: net N/A N/A
C:\cygwin / system binmode
c: /c system binmode
c:\home /home system binmode
C:\cygwin/bin /usr/bin system binmode
C:\cygwin/lib /usr/lib system binmode
. /cygdrive system binmode,cygdrive
Found: C:\cygwin\bin\awk.exe
Found: C:\cygwin\bin\bash.exe
Found: C:\cygwin\bin\cat.exe
Found:
c:\home\dpost\ccviews\dpost_vxworks\vxworks_vob\vxworks21\Tornado\host\x
86-win32\bin\cat.exe
Found: C:\cygwin\bin\cp.exe
Found: C:\cygwin\bin\cpp.exe
Found: C:\cygwin\bin\find.exe
Found: C:\cygwin\bin\gcc.exe
Found: C:\cygwin\bin\gdb.exe
Found: c:\Program Files\vslick\win\gdb.exe
Found: C:\cygwin\bin\grep.exe
Found: c:\Program Files\vslick\win\grep.exe
Found: C:\cygwin\bin\ld.exe
Found: C:\cygwin\bin\ls.exe
Found: C:\cygwin\bin\make.exe
Found:
c:\home\dpost\ccviews\dpost_vxworks\vxworks_vob\vxworks21\Tornado\host\x
86-win32\bin\make.exe
Found: C:\cygwin\bin\mv.exe
Found: C:\cygwin\bin\rm.exe
Found:
c:\home\dpost\ccviews\dpost_vxworks\vxworks_vob\vxworks21\Tornado\host\x
86-win32\bin\rm.exe
Found: C:\cygwin\bin\sed.exe
Found:
c:\home\dpost\ccviews\dpost_vxworks\vxworks_vob\vxworks21\Tornado\host\x
86-win32\bin\sed.exe
Found: C:\cygwin\bin\sh.exe
Found: C:\cygwin\bin\tar.exe
61k 2003/08/09 C:\cygwin\bin\cygbz2-1.dll
18k 2004/07/06 C:\cygwin\bin\cygcharset-1.dll
7k 2003/10/19 C:\cygwin\bin\cygcrypt-0.dll
841k 2004/03/17 C:\cygwin\bin\cygcrypto-0.9.7.dll
617k 2004/03/22 C:\cygwin\bin\cygcurl-2.dll
22k 2004/02/10 C:\cygwin\bin\cygcygipc-2.dll
380k 2002/07/24 C:\cygwin\bin\cygdb-3.1.dll
895k 2004/04/28 C:\cygwin\bin\cygdb-4.2.dll
487k 2002/07/24 C:\cygwin\bin\cygdb_cxx-3.1.dll
1156k 2004/04/28 C:\cygwin\bin\cygdb_cxx-4.2.dll
155k 2004/01/07 C:\cygwin\bin\cygexpat-0.dll
71k 2004/08/04 C:\cygwin\bin\cygexslt-0.dll
45k 2001/04/25 C:\cygwin\bin\cygform5.dll
35k 2002/01/09 C:\cygwin\bin\cygform6.dll
48k 2003/08/09 C:\cygwin\bin\cygform7.dll
28k 2003/07/20 C:\cygwin\bin\cyggdbm-3.dll
30k 2003/08/11 C:\cygwin\bin\cyggdbm-4.dll
19k 2003/03/22 C:\cygwin\bin\cyggdbm.dll
15k 2003/07/20 C:\cygwin\bin\cyggdbm_compat-3.dll
15k 2003/08/11 C:\cygwin\bin\cyggdbm_compat-4.dll
107k 2004/07/06 C:\cygwin\bin\cyggettextlib-0-14-1.dll
17k 2004/07/06 C:\cygwin\bin\cyggettextpo-0.dll
190k 2004/07/06 C:\cygwin\bin\cyggettextsrc-0-14-1.dll
489k 2003/08/09 C:\cygwin\bin\cygguile-12.dll
489k 2003/07/28 C:\cygwin\bin\cygguile-12abi13.dll
24k 2003/08/09 C:\cygwin\bin\cygguile-ltdl-1.dll
24k 2003/07/28 C:\cygwin\bin\cygguile-ltdl-1abi13.dll
62k 2003/08/09 C:\cygwin\bin\cygguile-srfi-srfi-13-14-v-1-1.dll
62k 2003/07/28 C:\cygwin\bin\cygguile-srfi-srfi-13-14-v-1-1abi13.dll
23k 2003/08/09 C:\cygwin\bin\cygguile-srfi-srfi-4-v-1-1.dll
23k 2003/07/28 C:\cygwin\bin\cygguile-srfi-srfi-4-v-1-1abi13.dll
11k 2003/08/09 C:\cygwin\bin\cygguilereadline-v-12-12.dll
11k 2003/07/28 C:\cygwin\bin\cygguilereadline-v-12-12abi13.dll
17k 2001/06/28 C:\cygwin\bin\cyghistory4.dll
29k 2003/08/10 C:\cygwin\bin\cyghistory5.dll
330k 2004/02/09 C:\cygwin\bin\cyghttpd.dll
991k 2004/07/06 C:\cygwin\bin\cygiconv-2.dll
22k 2001/12/13 C:\cygwin\bin\cygintl-1.dll
37k 2003/08/10 C:\cygwin\bin\cygintl-2.dll
54k 2004/07/06 C:\cygwin\bin\cygintl-3.dll
12k 2003/02/17 C:\cygwin\bin\cygioperm-0.dll
119k 2002/02/09 C:\cygwin\bin\cygjpeg6b.dll
60k 2003/09/17 C:\cygwin\bin\cygkpathsea-3.dll
60k 2003/07/27 C:\cygwin\bin\cygkpathsea-3abi13.dll
40k 2004/07/07 C:\cygwin\bin\cygltdl-3.dll
26k 2001/04/25 C:\cygwin\bin\cygmenu5.dll
20k 2002/01/09 C:\cygwin\bin\cygmenu6.dll
29k 2003/08/09 C:\cygwin\bin\cygmenu7.dll
15k 2003/11/20 C:\cygwin\bin\cygminires.dll
404k 2004/03/26 C:\cygwin\bin\cygnaim_core-0.dll
156k 2001/04/25 C:\cygwin\bin\cygncurses++5.dll
175k 2002/01/09 C:\cygwin\bin\cygncurses++6.dll
226k 2001/04/25 C:\cygwin\bin\cygncurses5.dll
202k 2002/01/09 C:\cygwin\bin\cygncurses6.dll
224k 2003/08/09 C:\cygwin\bin\cygncurses7.dll
15k 2001/04/25 C:\cygwin\bin\cygpanel5.dll
12k 2002/01/09 C:\cygwin\bin\cygpanel6.dll
19k 2003/08/09 C:\cygwin\bin\cygpanel7.dll
62k 2003/12/11 C:\cygwin\bin\cygpcre-0.dll
63k 2003/04/11 C:\cygwin\bin\cygpcre.dll
9k 2003/12/11 C:\cygwin\bin\cygpcreposix-0.dll
61k 2003/04/11 C:\cygwin\bin\cygpcreposix.dll
1061k 2004/08/19 C:\cygwin\bin\cygperl5_8_5.dll
168k 2003/08/10 C:\cygwin\bin\cygpng10.dll
173k 2003/08/10 C:\cygwin\bin\cygpng12.dll
22k 2002/06/09 C:\cygwin\bin\cygpopt-0.dll
108k 2001/06/28 C:\cygwin\bin\cygreadline4.dll
148k 2003/08/10 C:\cygwin\bin\cygreadline5.dll
672k 2003/12/25 C:\cygwin\bin\cygruby18.dll
171k 2004/03/17 C:\cygwin\bin\cygssl-0.9.7.dll
254k 2003/09/18 C:\cygwin\bin\cygtidy-0-99-0.dll
281k 2003/02/24 C:\cygwin\bin\cygtiff3.dll
1226k 2004/08/04 C:\cygwin\bin\cygxml2-2.dll
200k 2004/08/04 C:\cygwin\bin\cygxslt-1.dll
61k 2003/12/04 C:\cygwin\bin\cygz.dll
1126k 2004/05/26 C:\cygwin\bin\cygwin1.dll
Cygwin DLL version info:
DLL version: 1.5.10
DLL epoch: 19
DLL bad signal mask: 19005
DLL old termios: 5
DLL malloc env: 28
API major: 0
API minor: 116
Shared data: 4
DLL identifier: cygwin1
Mount registry: 2
Cygnus registry name: Cygnus Solutions
Cygwin registry name: Cygwin
Program options name: Program Options
Cygwin mount registry name: mounts v2
Cygdrive flags: cygdrive flags
Cygdrive prefix: cygdrive prefix
Cygdrive default prefix:
Build date: Tue May 25 22:07:00 EDT 2004
CVS tag: cr-0x5e6
Shared id: cygwin1S4
386k 2003/10/22
c:\home\dpost\ccviews\dpost_vxworks\vxworks_vob\vxworks21\Tornado\host\x
86-win32\bin\cygwinb19.dll
Cygwin Package Information
Package Version
_update-info-dir 00227-1
apache 1.3.29-2
ash 20040127-1
astyle 1.15.3-3
autoconf 2.59-1
autoconf-devel 2.59-1
autoconf-stable 2.13-5
automake 1.7.9-1
automake-devel 1.8.5-1
automake-stable 1.4p6-2
base-files 3.0-2
base-passwd 1.1-1
bash 2.05b-16
binutils 20040725-2
bzip2 1.0.2-5
c-client 2002e-3
ccache 2.2-1
ccdoc 0.8.39-1
check 0.8.4-1
cmake 2.0.3-1
compface 1.4-5
crypt 1.1-1
ctags 5.5-4
curl 7.11.1-1
curl-devel 7.11.1-1
cvs 1.11.6-3
cygipc 2.03-2
cygrunsrv 1.0-1
cygutils 1.2.5-1
cygwin 1.5.10-3
cygwin-doc 1.3-7
d 1.2.0-1
dejagnu 20021217-2
diffutils 2.8.7-1
doxygen 1.2.18-1
dpkg 1.10.4-2
editrights 1.01-1
expat 1.95.7-1
expect 20030128-1
file 4.09-1
fileutils 4.1-2
findutils 4.1.7-4
flex 2.5.4a-3
gawk 3.1.4-3
gcc 3.3.3-2
gcc-core 3.3.3-3
gcc-g++ 3.3.3-3
gcc-mingw 20040810-1
gcc-mingw-core 20040810-1
gcc-mingw-g++ 20040810-1
gcc2 2.95.3-10
gdb 20030919-1
gdbm 1.8.3-7
gettext 0.14.1-1
gettext-devel 0.14.1-1
gperf 2.7.2-1
grep 2.5-1
groff 1.18.1-2
guile 1.6.4-12
guile-devel 1.6.4-12
gzip 1.3.5-1
indent 2.2.9-1
ioperm 0.4-1
less 381-1
libbz2_1 1.0.2-5
libcharset1 1.9.2-1
libdb3.1 3.1.17-2
libdb4.2 4.2.52-1
libgdbm 1.8.0-5
libgdbm-devel 1.8.3-7
libgdbm3 1.8.3-3
libgdbm4 1.8.3-7
libgettextpo0 0.14.1-1
libguile12 1.6.4-12
libguile12abi13 1.6.4-2
libiconv 1.9.2-1
libiconv2 1.9.2-1
libintl1 0.10.40-1
libintl2 0.12.1-3
libintl3 0.14.1-1
libjpeg6b 6b-8
libkpathsea3 2.0.2-13
libkpathsea3abi13 2.0.2-2
libltdl3 1.5.6-3
libncurses-devel 5.3-4
libncurses5 5.2-1
libncurses6 5.2-8
libncurses7 5.3-4
libpcre 4.1-1
libpcre0 4.5-1
libpng10 1.0.15-4
libpng12 1.2.5-4
libpopt0 1.6.4-4
libreadline4 4.1-2
libreadline5 4.3-5
libtiff3 3.6.0-2
libtool 1.5b-1
libtool-devel 1.5.6-3
libtool-stable 1.4.3-2
libxml2 2.6.11-1
libxslt 1.1.8-1
login 1.9-7
m4 1.4-1
make 3.80-1
man 1.5k-3
mc 4.6.0-4
mingw-runtime 3.3-1
minires 0.97-1
mktemp 1.5-3
more 2.11o-1
naim 0.11.6.7-1
nasm 0.98.38-1
ncftp 3.1.7-1
ncurses 5.3-4
openssh 3.9p1-1
openssl 0.9.7d-1
openssl-devel 0.9.7d-1
patch 2.5.8-8
patchutils 0.2.30pre1-1
pcre 4.5-1
pcre-devel 4.5-1
pcre-doc 4.5-1
perl 5.8.5-3
pkgconfig 0.15.0-4
procps 010801-2
rcs 5.7-3
readline 4.3-5
rsync 2.6.2-2
ruby 1.8.1-1
sed 4.0.9-2
sh-utils 2.0.15-4
sharutils 4.2.1-3
splint 3.1.1-1
swig 1.3.19-1
tar 1.13.25-5
tcltk 20030901-1
tcsh 6.13.00-2
termcap 20021106-2
terminfo 5.3_20030726-1
tetex-devel 2.0.2-13
texinfo 4.2-4
textutils 2.0.21-1
tidy 030901-1
units 1.77-1
unzip 5.50-5
uw-imap 2002e-3
vim 6.3-1
w32api 2.5-1
wget 1.9.1-1
which 1.5-2
xerces-c-devel 2.5.0-1
zip 2.3-6
zlib 1.2.1-1
Use -h to see help about each section
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
- Raw text -