oaf race conditions ...



Hi Maciej,

	There seems to be a rather annoying oaf activation race still
occuring - I have the latest (HEAD) oafd installed, and if I do:

	oaf-slay
	test/oaf-run-query & test/oaf-run-query & test/oaf-run-query &
	ps ax

12538 ?        S      0:01 oafd --ac-activate --ior-output-fd=6
12541 ?        S      0:01 oafd --ac-activate --ior-output-fd=6
12543 ?        S      0:01 oafd --ac-activate --ior-output-fd=6

	of course subsequent oaf-run-queries don't activate yet more oafs;
but ... this is really not good news, especialy at gnome-session startup
time where we can have a whole load of things batch forked.

	I tried to verify the problem on HEAD bonobo-activation, but it
seems that running bonobo-activation-run-query crashes the
bonobo-activation server for reasons that are totaly opaque to me:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1024 (LWP 12731)]
0x40376caa in strcmp () from /lib/i686/libc.so.6
(gdb) bt
#0  0x40376caa in strcmp () from /lib/i686/libc.so.6
#1  0x0804d94c in qexp_evaluate_id (si=0x8086bc0, e=0x8083548,
qctx=0xbffff030) at activation-context-query.c:859
#2  0x0804de68 in qexp_evaluate (si=0x8086bc0, e=0x8083548,
qctx=0xbffff030) at activation-context-query.c:1107
#3  0x0804d386 in qexp_func_has (si=0x8086bc0, e=0x8083578,
qctx=0xbffff030) at activation-context-query.c:629
#4  0x0804d10a in qexp_evaluate_function (si=0x8086bc0, e=0x8083578,
qctx=0xbffff030) at activation-context-query.c:530
#5  0x0804de48 in qexp_evaluate (si=0x8086bc0, e=0x8083578,
qctx=0xbffff030) at activation-context-query.c:1101
#6  0x0804da8a in qexp_evaluate_binop (si=0x8086bc0, e=0x806a4e0,
qctx=0xbffff030) at activation-context-query.c:944
#7  0x0804de78 in qexp_evaluate (si=0x8086bc0, e=0x806a4e0,
qctx=0xbffff030) at activation-context-query.c:1110
#8  0x0804deee in qexp_matches (si=0x8086bc0, e=0x806a4e0,
qctx=0xbffff030) at activation-context-query.c:1136
#9  0x0804fdb0 in ac_query_run (servant=0x8069af8,
    requirements=0x806a3ac "( repo_ids.has('IDL:Empty:1.0') ) AND (NOT
test_only.defined() OR NOT test_only)", selection_order=0x806a410,
    ctx=0xbffff280, items=0xbffff090, ev=0xbffff360) at
activation-context-corba.c:383
#10 0x0805068f in impl_Bonobo_ActivationContext_query (_servant=0x8069af8,
    requirements=0x806a3ac "( repo_ids.has('IDL:Empty:1.0') ) AND (NOT
test_only.defined() OR NOT test_only)", selection_order=0x806a410,
    ctx=0xbffff280, ev=0xbffff360) at activation-context-corba.c:786
#11 0x4001f1b0 in _ORBIT_skel_small_Bonobo_ActivationContext_query
(_o_servant=0x8069af8, _o_retval=0xbffff27c, _o_args=0xbffff240,
    _o_ctx=0xbffff280, _o_ev=0xbffff360, _impl_query=0x8050624
<impl_Bonobo_ActivationContext_query>) at
Bonobo_ActivationContext-skels.c:138
#12 0x4005071c in ORBit_POAObject_invoke (pobj=0x8069998, ret=0xbffff27c,
args=0xbffff240, ctx=0xbffff280, data=0xbffff2f8, ev=0xbffff360)
    at poa.c:1005
#13 0x400522df in ORBit_OAObject_invoke (adaptor_obj=0x8069998,
ret=0xbffff27c, args=0xbffff240, ctx=0xbffff280, data=0xbffff2f8,
ev=0xbffff360)
    at orbit-adaptor.c:81
#14 0x40045a9f in ORBit_small_invoke_adaptor (adaptor_obj=0x8069998,
recv_buffer=0x806f160, m_data=0x400282c0, data=0xbffff2f8, ev=0xbffff360)
    at orbit-small.c:770
#15 0x40050af5 in ORBit_POAObject_handle_request (pobj=0x8069998,
opname=0x806f208 "query", ret=0x0, args=0x0, ctx=0x0,
recv_buffer=0x806f160,
    ev=0xbffff360) at poa.c:1171
#16 0x40050d1d in ORBit_POA_handle_request (poa=0x805e798,
recv_buffer=0x806f160, objkey=0x806f178) at poa.c:1245
#17 0x4005226a in ORBit_handle_request (orb=0x805e748,
recv_buffer=0x806f160) at orbit-adaptor.c:44
#18 0x4003fdc6 in giop_connection_handle_input (lcnx=0x8085c10) at
giop-connection.c:154
#19 0x400684d6 in linc_connection_connected (gioc=0x8085c60,
condition=G_IO_IN, data=0x8085c10) at linc-connection.c:84
#20 0x401fb473 in g_io_unix_dispatch (source=0x8085d20,
callback=0x40068444 <linc_connection_connected>, user_data=0x8085c10) at
giounix.c:159
#21 0x401df61a in g_main_dispatch (context=0x805f820) at gmain.c:1616
#22 0x401dff49 in g_main_context_dispatch (context=0x805f820) at
gmain.c:2151
#23 0x401e02e4 in g_main_context_iterate (context=0x805f820, block=1,
dispatch=1, self=0x8094918) at gmain.c:2232
#24 0x401e098e in g_main_loop_run (loop=0x805f8b0) at gmain.c:2452
#25 0x08052436 in main (argc=2, argv=0xbffff6dc) at
activation-server-main.c:256
#26 0x4030e177 in __libc_start_main (main=0x8051fc0 <main>, argc=2,
ubp_av=0xbffff6dc, init=0x804bcf0 <_init>, fini=0x8054280 <_fini>,
    rtld_fini=0x4000e184 <_dl_fini>, stack_end=0xbffff6cc) at
../sysdeps/generic/libc-start.c:129
(gdb) up
#1  0x0804d94c in qexp_evaluate_id (si=0x8086bc0, e=0x8083548,
qctx=0xbffff030) at activation-context-query.c:859
859					if (!strcmp
(gdb) l
854			else if (!g_ascii_strcasecmp (e->u.id_value,
"domain"))
855				retval.u.v_string = si->domain;
856			else {
857				int i;
858				for (i = 0; i < si->props._length; i++) {
859					if (!strcmp
860					    (e->u.id_value,
861					     si->props._buffer[i].name))
break;
862				}
863
(gdb) p *e
$1 = {type = EXPR_ID, u = {function_value = {func_name = 0x806f398
"repo_ids", arguments = 0x31363336}, var_value = 0x806f398 "repo_ids",
    id_value = 0x806f398 "repo_ids", binop_value = {type = 134673304, op1
= 0x31363336, op2 = 0x34366336}, unop_value = {type = 134673304,
      op = 0x31363336}, constant_value = {type = 134673304, u = {v_string
= 0x31363336 <Address 0x31363336 out of bounds>, v_stringv = 0x31363336,
        v_number = 3.5665417897639486e-57, v_boolean = 825635638},
value_known = 54 '6', needs_free = 102 'f'}}, cached_value = {type =
959852854,
    u = {v_string = 0x30306536 <Address 0x30306536 out of bounds>,
v_stringv = 0x30306536, v_number = 1.3980432860994536e-76, v_boolean =
808478006},
    value_known = 50 '2', needs_free = 56 '8'}, has_fields = 1 '\001',
have_cached_value = 0 '\000'}
(gdb) p *si
$4 = {iid = 0x808743c "OAFIID:GNOME_Config_Daemon", server_type =
0x80699cc "exe", location_info = 0x80699dc "gconfd-2",
  username = 0x8069a2c "michael", hostname = 0x80699f4
"localhost.localdomain", domain = 0x8069a14 "session", props = {_maximum =
0, _length = 1,
    _buffer = 0x8069a40, _release = 0 '\000'}}
(gdb) p si->props->_buffer [0]
$7 = {name = 0x0, v = {_d = Bonobo_ACTIVATION_P_STRING, _u = {value_string
= 0x0, value_number = 0, value_boolean = 0 '\000', value_stringv = {
        _maximum = 0, _length = 0, _buffer = 0x0, _release = 0 '\000'}}}}

	ie. we're getting a Bonobo_ServerInfo node with properties with
NUILL name / values - which is killing us;

	Any ideas ?

		Michael.

-- 
 mmeeks gnu org  <><, Pseudo Engineer, itinerant idiot





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