Help with core dump



Hi Folks,

can anyone make a suggestion as to what might be breaking in my code?

Here's what I'm doing (much of this is similar to the helloworld-remote example that I've just posted, except with some additional threading):

* There are two servers processes running (each with a CORBA object which handles all requests), and a client which can invoke methods on both. * What now happens is that there is a method to create task threads, so let's say that a few threads are created. * The last step is that work is submitted through the server object to one of the threads through a queue, where the work will contain a reference to the object on the other server. The thread invokes a method on the reference, and again this 'works'. * However.. when this sequence of steps completes, one of the threads has core dumped with a backtrace like:

#0  0x401b63f7 in ORBit_POA_deactivate_object_T (poa=0x806c298,
pobj=0x806c5d0, do_etherealize=1 '\001', is_cleanup=1 '\001') at poa.c:1075
#1  0x401b55a9 in traverse_cb (oid=0x806c60c, pobj=0x806c5d0, info=0x1)
   at poa.c:541
#2  0x40292536 in g_hash_table_foreach () from /usr/lib/libglib-2.0.so.0
#3  0x401b567e in ORBit_POA_deactivate (poa=0x806c298,
   etherealize_objects=1 '\001', ev=0xbffff180) at poa.c:588
#4  0x401b5421 in ORBit_POA_destroy_T_R (poa=0x806c298,
   etherealize_objects=1 '\001', ev=0xbffff180) at poa.c:525
#5  0x401b7d02 in PortableServer_POA_destroy (poa=0x806c298,
etherealize_objects=1 '\001', wait_for_completion=1 '\001', ev=0xbffff180)
   at poa.c:1957
#6  0x401a6601 in CORBA_ORB_shutdown (orb=0x806c240,
   wait_for_completion=1 '\001', ev=0xbffff180) at corba-orb.c:1133
#7  0x401a669c in CORBA_ORB_destroy (orb=0x806c240, ev=0xbffff180)
   at corba-orb.c:1163
#8  0x401a52b2 in shutdown_orb () at corba-orb.c:255
#9  0x4034d1a0 in exit () from /lib/libc.so.6
#10 0x40337114 in __libc_start_main () from /lib/libc.so.6
#11 0x08052a61 in _start ()

This looks to me as though the thread has decided to do an exit and then shutdown the ORB.

I've tried a few variations to see what dies and what doesn't. If I remove the final method call, it doesn't core dump. Also, if I have the call disabled, and move it to the method where the call is submitted (i.e. don't queue it or have it picked up by the thread), then again this works (but obviously not running in the thread as I intend it to).

If this looks more like an ORBit question than an orbitcpp one, I'll repost there. I know, I know, I really need to produce a cut down example to demonstrate my problem; I'll see what I can come up with.

Thanks in advance,

Nick Glencross



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]