Mail Archives: cygwin/2003/01/19/03:02:47
Okay, there are at least two problems happening in XWin.exe.
The first problem is totally unrelated to the new multiwindow mode. The
problem is, if you startup XWin.exe in gdb, a call to fchown causes a
SIGSEGV on every single execution. That sucks.
You can avoid that problem by setting a break in
_XSERVTransSocketUNIXCreateListener, then stepping until right before the
call to fchown, then ``set updateOwner=0'', which causes the call to be
skipped. After that you can continue. In non-multiwindow mode the server
will run fine after the continue.
The second problem is that in multiwindow mode the call to
pthread_mutex_init causes a SIGSEGV. That sucks too. I have peeked at the
code for pthread_mutex, but I can't figure out much. I might eventually
have to setup a cygwin1.dll build environment so I can debug this, but I
would really like to avoid that if possible. I actually started building a
debug version of cygwin1.dll tonight, but I got to the part where it needs
libiberty and I wussed out.
I am kinda stuck. Any help would be appreciated. Even saying, ``yeah, we
know that gdb doesn't work well when you call fchown'' would be help enough
for me.
Oh yeah, I also tried this with the 20030117 cygwin1.dll snapshot. Same
results.
Thanks in advance,
Harold
////////////////////////////////////////////////////////////////////////
Running with -multiwindow or without -multiwindow, setting a breakpoint in
_XSERVTransSocketUNIXCreateListener
////////////////////////////////////////////////////////////////////////
Starting program: /usr/X11R6/bin/XWin.exe -multiwindow
Program received signal SIGSEGV, Segmentation fault.
0x77e6d0c0 in _libkernel32_a_iname ()
(gdb) where
#0 0x77e6d0c0 in _libkernel32_a_iname ()
#1 0x00000001 in ?? ()
#2 0x6103f35f in _libkernel32_a_iname ()
#3 0x6103f38b in _libkernel32_a_iname ()
#4 0x6107b7df in _libkernel32_a_iname ()
#5 0x6107baba in _libkernel32_a_iname ()
#6 0x0044b96a in trans_mkdir (path=0x448cb7 "/tmp/.X11-unix", mode=1023)
at ../../../lib/xtrans/Xtransutil.c:495
#7 0x00448e37 in _XSERVTransSocketUNIXCreateListener (ciptr=0x100f26b8,
port=0x22fd30 "0") at ../../../lib/xtrans/Xtranssock.c:932
#8 0x0044a5b1 in _XSERVTransCreateListener (ciptr=0x100f26b8,
port=0x22fd30 "0") at ../../../lib/xtrans/Xtrans.c:734
#9 0x0044ac98 in _XSERVTransMakeAllCOTSServerListeners (port=0x22fd30 "0",
partial=0x22fd58, count_ret=0x83f440, ciptrs_ret=0x7e4550)
at ../../../lib/xtrans/Xtrans.c:1029
#10 0x0043ed5c in CreateWellKnownSockets () at connection.c:342
#11 0x0040155c in main (argc=2, argv=0x100f1c00, envp=0x100f0330) at
main.c:327
#12 0x61007638 in _libkernel32_a_iname ()
#13 0x6100791d in _libkernel32_a_iname ()
#14 0x007e1862 in cygwin_crt0 ()
#15 0x0040103c in mainCRTStartup ()
#16 0x77e814c7 in _libkernel32_a_iname ()
(gdb) break _XSERVTransSocketUNIXCreateListener
Breakpoint 2 at 0x448e08: file ../../../lib/xtrans/Xtranssock.c, line 924.
(gdb) stop
(gdb) run -multiwindow
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /usr/X11R6/bin/XWin.exe -multiwindow
Breakpoint 2, _XSERVTransSocketUNIXCreateListener (ciptr=0x100f26b8,
port=0x22fd30 "0") at ../../../lib/xtrans/Xtranssock.c:924
924 oldUmask = umask (0);
(gdb) s
928 mode = 01777;
(gdb)
932 if (trans_mkdir(UNIX_DIR, mode) == -1) {
(gdb)
trans_mkdir (path=0x448cb7 "/tmp/.X11-unix", mode=1023)
at ../../../lib/xtrans/Xtransutil.c:439
439 if (mkdir(path, mode) == 0) {
(gdb)
445 if (errno == EEXIST) {
(gdb)
446 if (lstat(path, &buf) != 0) {
(gdb)
451 if (S_ISDIR(buf.st_mode)) {
(gdb)
452 int updateOwner = 0;
(gdb)
453 int updateMode = 0;
(gdb)
454 int updatedOwner = 0;
(gdb)
455 int updatedMode = 0;
(gdb)
457 if (buf.st_uid != 0)
(gdb)
458 updateOwner = 1;
(gdb)
464 if ((~mode) & 0077 & buf.st_mode)
(gdb)
466 if ((mode & 01000) &&
(gdb)
475 if (updateMode || updateOwner) {
(gdb)
476 int fd = -1;
(gdb)
478 if ((fd = open(path, O_RDONLY)) != -1) {
(gdb)
479 if (fstat(fd, &fbuf) == -1) {
(gdb)
488 if (!S_ISDIR(fbuf.st_mode) ||
(gdb)
495 if (updateOwner && fchown(fd, 0, 0) == 0)
(gdb)
Program received signal SIGSEGV, Segmentation fault.
0x77e6d0c0 in _libkernel32_a_iname ()
(gdb)
////////////////////////////////////////////////////////////////////////
Running with -multiwindow, but running set updateOwner=0 right before the
call to fchown, then continuing until the breakpoint in InitQueue is hit:
////////////////////////////////////////////////////////////////////////
495 if (updateOwner && fchown(fd, 0, 0) == 0)
(gdb) set updateOwner=0
(gdb) continue
Continuing.
Breakpoint 1, InitQueue (pQueue=0x100fb95c) at winmultiwindowwm.c:304
304 if (pQueue == NULL)
(gdb) s
311 pQueue->pHead = NULL;
(gdb)
312 pQueue->pTail = NULL;
(gdb)
315 s_nQueueSize = 0;
(gdb)
321 ErrorF ("InitQueue - Calling pthread_mutex_init\n");
(gdb) n
324 pthread_mutex_init (&pQueue->pmMutex, NULL);
(gdb) s
Program received signal SIGSEGV, Segmentation fault.
0x77e75a3d in _libkernel32_a_iname ()
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Bug reporting: http://cygwin.com/bugs.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
- Raw text -