From: Chris Chuter (cchuter++at++yahoo.com)
Date: 03/30/2000 15:25:24
Performers,
Has anyone had problems performing sproc's in the newer versions of Performer.
We're trying to upgrade our program from Performer 2.2.2 to 2.2.7, but our code
that performs sproc's hangs in Performer 2.2.4, 2.2.6, and 2.2.7 (Haven't
tested Performer 2.2.5). It works fine in Performer 2.2.2. It's dificult to
determine where exactly the program is hanging but it appears to be somewhere
in the Performer signal handler. Running the program multiprocess through dbx,
shows it hanging on this line:
(dbx) where
> 0 _nsproc(0x1024fd30, 0x7f, 0x4002dc9950, 0x0, 0x0, 0x40034fbe10,
0x4002dc9950, 0x0)
["/xlv43/6.5.7m/work/irix/lib/libc/libc_64_M4/proc/sproc.s":157, 0xda4d2f0]
1 Mesh::setVolumeColors(Volume*,bool)(this = 0x40034fbe10, v = 0x4002983570,
force = '\001')
["/hosts/zeus/usr/irisu/chutecj/work/Appls/ChunkView/Grid/mesh_color.c++":103,
0x1024f714]
which is:
//---------------------------------------------------------------------
// Launch the thread.
//
int pid = sproc((void (*)(void *))&Mesh::colorByVolThread,
PR_SALL, (void *)&data[i]);
What's interesting is that when we look at the log (We print the start and stop
of all threads to stderr), we see that some threads that exit don't appear to
receive the Performer Notify SIGCHLD string. For Example, here's the relevant
part of the log:
83983 PF Notice: Caught SIGCHLD of process with pid 84044
83983 PF Notice: Caught SIGCHLD of process with pid 84024
Mesh::setVolumeColors(), starting 5 threads, perThread:1, leftover:5
Mesh::setVolumeColors(), pid:84034, start:0, count:1 leftover:5
Mesh::setVolumeColors(), pid:84042, start:1, count:1 leftover:4
Mesh::setVolumeColors(), pid:84043, start:2, count:1 leftover:3
Mesh::setVolumeColors(), pid:84058, start:3, count:1 leftover:2
Mesh::setVolumeColors(), pid:84057, start:4, count:1 leftover:1
Mesh::setVolumeColors(), waiting on threads
Mesh::setVolumeColors(), setting up barrier barCount:6
Mesh::colorByVolThread exiting 84057
Mesh::setVolumeColors(), done
Mesh::colorByVolThread exiting 84043
Mesh::colorByVolThread exiting 84042
Mesh::colorByVolThread exiting 84058
Mesh::colorByVolThread exiting 84034
Mesh::setVolumeColors(), starting 2 threads, perThread:1, leftover:2
(The program freezes here.)
Notice all threads exit (via a exit(0) call), but Performer doesn't show that
it received a SIGCHLD. This could likely be that the program simply locked
before getting the printf call, but who knows. Interestingly enough, during the
lockup, a 'ps -ef' shows that process 84057 is defunct:
chutecj 84057 83983 0 - - 0:00 <defunct>
Is this a clue or just a side effect of the SIGCHLD?
Unfortunately, this bug can be more fatal than seg-fault; in some cases it
freezes the X-server. Also, it seems to be somewhat random in nature, sometimes
doing 1000 sprocs before hanging. Does anyone have any ideas?
stumped,
Chris Chuter
=====
Chris Chuter
Software Engineer
Mojave Computer Graphics
cchuter++at++texas.net
http://www.texas.net/~cchuter/
__________________________________________________
Do You Yahoo!?
Talk to your friends online with Yahoo! Messenger.
http://im.yahoo.com
This archive was generated by hypermail 2b29 : Thu Mar 30 2000 - 15:25:48 PST