bug (?) in libbonobo that is breaking evolution



In the evolution addressbook, we've been plagued by 100%-cpu-sucking
lock-ups.  I've traced the problem to a race condition in which horrible
things happen when impl_Bonobo_Control_realize gets called at a
particularly inopportune time.[1]

We are spinlocking somewhere inside of the gtk_events_pending() call in:

	if (!control->priv->is_local) {
		while (gtk_events_pending ())
			gtk_main_iteration ();
		gdk_flush ();
	}

(this is from bonobo/bonobo-control.c, around line 460)

at the bottom of a long, convoluted stack trace.  If I comment this code
out, the problem disappears without any obvious adverse effects. 

I'm a bit confused by the fact that is_local must be false when this
happens, since my factory and the embedding app are always both running
on the same machine.  Is this the meta-bug (i.e.
bonobo_gtk_widget_from_x11_id is failing to correctly distinguish
between the local and the remote case), or have I totally misunderstood
what is going on here?

Any insights are greatly appreciated.

Thanks,
-JT


[1] To be specific, during event processing that occurs inside of a call
    to bonobo_ref that occurs during a signal emission from inside of
    an idle function...








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