Re: [Nautilus-list] nautilus and EOG component



on 9/24/01 12:44 AM, Fabrice Bellet at Fabrice Bellet creatis insa-lyon fr
wrote:

> I first problem I found is that vfs_get_info() in
> components/adapter/bonobo-stream-vfs.c needs to be
> implemented. I reused some code from the bonobo
> module for this. See bugzilla #44402.

That looks like a good fix for 44402. Feel free to check it in.

> Then, when I invoke nautilus on a directory containing
> images, I cannot start the eog component directly
> through the GUI (Open with -> EOG image viewer).
> The nautilus-adapter processes crashes with the
> following stack :
> 
> Program received signal SIGSEGV, Segmentation fault.
> 0x400b2429 in impl_Bonobo_Control_activate (servant=0x8151b14, activated=1,
>   ev=0xbfffefa0) at bonobo-control.c:213
> 213        control->priv->active = activated;
> (gdb) up
> #1  0x40069173 in _ORBIT_skel_Bonobo_Control_activate (
>   _ORBIT_servant=0x8151b14, _ORBIT_recv_buffer=0x80c16d0, ev=0xbfffefa0,
>   _impl_activate=0x400b2370 <impl_Bonobo_Control_activate>)
>   at Bonobo-skels.c:6154
> up6154       _impl_activate(_ORBIT_servant, activate, ev);
> (gdb) up
> #2  0x403bc10a in ORBit_POA_handle_request () from /usr/lib/libORBit.so.0
> (gdb) bt
> #0  0x400b2429 in impl_Bonobo_Control_activate (servant=0x8151b14,
>   activated=1, ev=0xbfffefa0) at bonobo-control.c:213
> #1  0x40069173 in _ORBIT_skel_Bonobo_Control_activate (
>   _ORBIT_servant=0x8151b14, _ORBIT_recv_buffer=0x80c16d0, ev=0xbfffefa0,
>   _impl_activate=0x400b2370 <impl_Bonobo_Control_activate>)
>   at Bonobo-skels.c:6154
> #2  0x403bc10a in ORBit_POA_handle_request () from /usr/lib/libORBit.so.0
> #3  0x403bf157 in CORBA_ORB_run () from /usr/lib/libORBit.so.0
> #4  0x403bf44f in CORBA_ORB_run () from /usr/lib/libORBit.so.0
> #5  0x403d9322 in giop_recv_reply_buffer_use_multiple_2 ()
>  from /usr/lib/libIIOP.so.0
> #6  0x403d93f1 in giop_recv_reply_buffer_use_2 () from /usr/lib/libIIOP.so.0
> #7  0x4004f571 in Bonobo_Unknown_unref (_obj=0x81545d8, ev=0xbffff110)
>   at Bonobo-stubs.c:169
> #8  0x4007dbc8 in bonobo_object_release_unref (object=0x81545d8, ev=0x0)
>   at bonobo-object.c:444
> #9  0x4002e16e in view_frame_call_end (frame=0x81545d8, ev=0xbffff180)
>   at nautilus-view.c:522
> #10 0x4002e6f5 in call_report_load_complete (view=0x8151ed8,
> callback_data=0x0)
>   at nautilus-view.c:733
> #11 0x4002b38b in execute_queued_functions (callback_data=0x8151f38)
>   at nautilus-idle-queue.c:66
> #12 0x4080379d in g_idle_dispatch () from /usr/lib/libglib-1.2.so.0
> #13 0x40802773 in g_main_dispatch () from /usr/lib/libglib-1.2.so.0
> #14 0x40802d39 in g_main_iterate () from /usr/lib/libglib-1.2.so.0
> 
> --> the BonoboControl is freeed in the middle of
> impl_Bonobo_Control_activate()
> in bonobo/bonobo-control.c

What's happening here is that the eog component has done a
"report_load_complete" call, this in turn causes the adapter component to do
a "report_load_complete" call. This call was just made, and it has caused
the Nautilus shell to decide to present the new view. That in turn causes
Nautilus to activate the component's frame, and we get an incoming
Bonobo_Control_activate call coming from the control frame.

I don't see any indication in this backtrace for why there would be a
segfault. You say that the control is freed. Who freed the control? It
doesn't make any sense that there would still be a queued
"report_load_complete" function for an already-freed control. The next step
to track this down is to figure out who frees the control and why.

> The eog component also seems to behave strangely :
> 
> [bellet lxorgfr bellet]% env DEBUG_EOG=1 eog-image-viewer
> 
> Message: Successfully registered `OAFIID:GNOME_EOG_Factory'
> Eog-Message: Trying to produce a 'OAFIID:GNOME_EOG_Control'...
> Eog-Message: Creating EogControl...
> Eog-Message: Creating EogImageView...
> Eog-Message: Loading stream...
> Eog-Message: Setting ui container for EogImageView...
> 
> Gdk-WARNING **: GdkWindow 0x4c00022 unexpectedly destroyed
> 
> Gdk-WARNING **: GdkWindow 0x4c00023 unexpectedly destroyed
> 
> Gdk-WARNING **: GdkWindow 0x4c00024 unexpectedly destroyed
> 
> Gdk-WARNING **: GdkWindow 0x4c00021 unexpectedly destroyed
> 
> Gdk-WARNING **: GdkWindow 0x4c0001e unexpectedly destroyed
> 
> Gdk-WARNING **: GdkWindow 0x4c0001f unexpectedly destroyed
> 
> Gdk-WARNING **: GdkWindow 0x4c00020 unexpectedly destroyed
> 
> Gdk-WARNING **: GdkWindow 0x4c0001d unexpectedly destroyed
> 
> Gdk-WARNING **: GdkWindow 0x4c00017 unexpectedly destroyed
> 
> Gdk-WARNING **: GdkWindow 0x4c00006 unexpectedly destroyed
> Eog-Message: Destroying EogImageView...
> Eog-Message: EogImageView destroyed.
> Eog-Message: Destroying EogControl...

This trace alone does not tell me enough to debug anything. What actions did
you take in the Nautilus UI?

> A last point : when I first display the image with the
> image viewer component, and then switch to the EOG
> component, everything runs fine.

The problem has something to do with the sequence of CORBA calls. It's hard
to write code that can deal with the incoming calls since they can happen at
almost any time -- an incoming CORBA call from another process can happen
any time you make any outgoing CORBA call, including "unref".

    -- Darin





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