I have some code that is tracking a box2d manipulatable object (signal 
connected to notify::allocation) and if the object has moved more than X pixels 
from where the manipulation started, I send a synthetic event to the actor so 
that clutter-box2d will disconnect the mouse joint.

It all works great.  Usually.

Sometimes I get a segfault in clutter_box2d_mouse_joint_update_target due to 
the passed joint from clutter_box2d_actor_motion being NULL.

It looks like either clutter_actor_transform_stage_point() or 
clutter_actor_get_parent() allows events to be processed, which allows other 
signal handlers to be processed within the if (priv->mouse_joint) path.  When 
combined with the mouse release event, Bad Things(tm) seem to be able to happen.

I looked through clutter_actor_transform_stage_point and 
clutter_actor_get_parent and didn't see where any opportunity existed for 
events to be processed.

After sticking a check on priv->mouse_joint immediately before calling clutter_box2d_mouse_joint_update, I don't see the segfault anymore.
I would like to understand where the re-entrancy is coming from though.

James
--
To unsubscribe send a mail to [EMAIL PROTECTED]

Reply via email to