[Evolution] Evolution hangs on Solaris



Evolution Team:

Hello from the Sun Gnome team.  Sorry for the long email.

Summary:

   On the Solaris 8 platform, the evolution-mail program is
   generating a segmentation fault after starting Evolution.  We
   have found that removing line 817 of mail-local.c and recompiling
   causes Evolution to start okay.  Following please find the
   analysis we went through to discover this issue.

Question:

   We are hoping that an Evolution expert can help us understand how
   this area of the code works.  We would like to better understand why 
   line 817 of mail-local.c is causing this problem, and would 
   appreciate any tips about how to further debug the problem.

Background:

   We are working on the Sun Solaris 8 platform using Evolution built
   from the Gnome CVS head from January 8th.  This code hangs
   immediately after showing the "evolution preview release 8"
   splash screen and the 4 icons.  The problem exists both running
   Solaris 8 on a Sun Ultra 10 and Solaris 8 on Intel.

   We have verified that evolution preview release 8 does not seem to
   exhibit this problem on the Red Hat Linux 7.0 platform running on 
   an Intel processor.  We are using the same source code for our Sun
   Solaris and Red Hat Linux Gnome builds.

Please let us know if there is any additional information we can
provide to help you understand the problems that we are seeing.

We are using the following Gnome dependencies:

--dependencies start--

gnome-xml:      LIB_XML_1_BRANCH
gnome-print:    January 8th Gnome CVS head              
gdk-pixbuf:     January 8th Gnome CVS head              
ORBit:          orbit-stable-0-5
oaf:            oaf-stable-0-6
gnome-vfs:      January 8th Gnome CVS head              
bonobo:         January 8th Gnome CVS head              
libunicode:     January 8th Gnome CVS head              
gconf:          gconf-1-0
gal:            January 8th Gnome CVS head              
gtkhtml:        January 8th Gnome CVS head              
libglade:       January 8th Gnome CVS head              
evolution:      January 8th Gnome CVS head              

glib:           glib-1-2
gnome-core:     gnome-core-1-2
gnome-libs:     gnome-libs-1-0
gtk+:           gtk-1-2
imlib:          January 8th Gnome CVS head              

--dependencies end--

The following output appears on stderr. 

--stderr begin--

Gdk-WARNING **: locale not supported by C library
Registered type for component -- (tasks)
   OAFIID:GNOME_Evolution_Calendar_ShellComponent
Registered type for component -- (calendar)
   OAFIID:GNOME_Evolution_Calendar_ShellComponent
Evolution component activated successfully --
   OAFIID:GNOME_Evolution_Calendar_ShellComponent
Registered type for component -- (mailstorage)
   OAFIID:GNOME_Evolution_Mail_ShellComponent
Registered type for component -- (mail)
   OAFIID:GNOME_Evolution_Mail_ShellComponent
Evolution component activated successfully --
   OAFIID:GNOME_Evolution_Mail_ShellComponent
Registered type for component -- (executive-summary)
   OAFIID:GNOME_Evolution_Summary_ShellComponent
Evolution component activated successfully --
   OAFIID:GNOME_Evolution_Summary_ShellComponent
Registered type for component -- (contacts)
   OAFIID:GNOME_Evolution_Addressbook_ShellComponent
Evolution component activated successfully --
   OAFIID:GNOME_Evolution_Addressbook_ShellComponent
Shell: Registering storage -- VFolders 

--stderr end--

Running the pstack command returns the following information about the
stack of the three running threads after Evolution seems to hang.

--pstack begin--

$ pstack 19339
19339:  evolution
-----------------  lwp# 1 / thread# 1  --------------------
 fe2990cc poll     (ffbee790, 5, ffffffff)
 fe24c638 select   (e, 0, ffbee880, fe2bb1bc, ffbee900, ffbee790) + 2cc
 fe58b4c4 select   (1, fe3caa74, 99a78, 0, 0, 0) + 34
 fe3b3ef0 giop_main_next_message_2 (1, cf108, 0, ffffffff, 1d, c0208) + 44
 fe3b67e8 giop_recv_reply_buffer_use_multiple_2 (cf108, ffbeeb00, 1, 7efefeff,
81010100, ff00) + bc
 fe3b69c4 giop_recv_reply_buffer_use_2 (cf108, ffbeeb84, 1, 7efefeff, 1d,
ffbeeb80) + 2c
 0004f860 GNOME_Evolution_ShellComponent_setOwner (cf068, b0d90, c3a10,
ffbeec08, 81010100, ff0000) + 230
 00059bb8 evolution_shell_component_client_set_owner (c3e98, b0d90, c3a10, 3,
0, 0) + 1a4
 00033994 set_owner_on_components (abe58, bb580, ffbeed28, bc, 0, 0) + b4
 00034904 e_shell_construct (abe58, b0d90, 763f8, abb38, 1, 0) + 4a4
 00034b90 e_shell_new (abb38, 1, 0, 0, 0, 0) + 154
 00045a2c idle_cb  (abb38, 45a00, 0, 0, 0, 0) + 2c
 feb0ee30 g_idle_dispatch (45a00, ffbeefd8, abb38, feb0ee10, 17908, ffbeef38)
+ 20
 feb0cc1c g_main_dispatch (ffbeefd8, ffbeefd8, feb3c3f0, feb09b14, feb09ae0,
fe893921) + 1bc
 feb0d9a0 g_main_iterate (1, 1, 1, ff050a08, ff3e2628, fe48d2c3) + c3c
 feb0dc98 g_main_run (a9298, 8fa8c, feadc72c, fe7d19b0, ff3e2628, 17165) + 110
 fe99fc5c gtk_main (1, 45a00, abb38, 0, 0, fe29b55c) + 1a0
 fe4ee2f4 bonobo_main (4, abb38, 45800, ffbef2bc, ffbef1d8, 0) + c
 00045dd8 main     (1, ffbef2bc, ffbef2c4, 8f9b8, 0, 0) + 190
 0001f054 _start   (0, 0, 0, 0, 0, 0) + 5c
-----------------  lwp# 2 / thread# 2  --------------------
 fe29a890 signotifywait ()
 fe57e920 _dynamiclwps (fe59e000, 5c, 0, 0, 0, 0) + 1c
 fe581c78 thr_yield (0, 0, 0, 0, 0, 0) + 8c
-----------------  lwp# 3  --------------------------------
 fe298454 door     (0, 0, 0, 0, fe135d18, 4)
 fe57a440 _lwp_start (fe135d78, 0, 6000, ffbeed74, 0, 0) + 18
 fe581c78 thr_yield (0, 0, 0, 0, 0, 0) + 8c
-----------------  lwp# 4  --------------------------------
 fe29ae74 lwp_cond_wait (fe5a55c8, fe5a55d8, fe123c48)
 fe292b30 _lwp_cond_timedwait (0, 3a5b61c1, fe123cb0, fe5a55c8, fe5a55d8, 0) +
98
 fe578e18 _age     (fe59edc0, fe59edc4, fe59e000, 3, fe59e000, 1) + 94
 fe57a440 _lwp_start (fe123d78, 0, 4000, fe00fc34, 0, 0) + 18
 fe581c78 thr_yield (0, 0, 0, 0, 0, 0) + 8c
--------------------------  thread# 3  --------------------
 fe57d8d8 _reap_wait (fe5a2a30, 20a04, 0, fe59e000, 0, 0) + 38
 fe57d630 _reaper  (fe59ee58, fe5a4798, fe5a2a30, fe59ee30, 1, fe400000) + 38
 fe58bb24 _thread_start (0, 0, 0, 0, 0, 0) + 40

--pstack end--

Doing a backtrace in gdb at the point of hanging shows similar
information for thread #1, but slightly more detail:

--gdb output start--

#0  0xfe2990cc in _poll () from /usr/lib/libc.so.1
#1  0xfe24c640 in select () from /usr/lib/libc.so.1
#2  0xfe58b4cc in select () from /usr/lib/libthread.so.1
#3  0xfe3b3ef8 in giop_main_next_message_2 (blocking=1, monitor=0xcf310) at
connection.c:1174
#4  0xfe3b67f0 in giop_recv_reply_buffer_use_multiple_2 (request_cnx=0xcf310, 
    request_ids=0xffbeeaf0, block_for_reply=1) at giop-msg-buffer.c:1011
#5  0xfe3b69cc in giop_recv_reply_buffer_use_2 (request_cnx=0xcf310,
request_id=4290702196, 
    block_for_reply=1) at giop-msg-buffer.c:1058
#6  0x4f868 in GNOME_Evolution_ShellComponent_setOwner (_obj=0xcefc8,
shell=0xb0df8, 
    evolution_homedir=0xc3ab0 "/export/home/gnome/evolution", ev=0xffbeebf8)
    at Evolution-stubs.c:309
#7  0x59bc0 in evolution_shell_component_client_set_owner
(shell_component_client=0xc3f38, 
    shell=0xb0df8, evolution_homedir=0xc3ab0 "/export/home/gnome/evolution")
    at evolution-shell-component-client.c:373
#8  0x3399c in set_owner_on_components (shell=0xa9650) at e-shell.c:498
#9  0x3490c in e_shell_construct (shell=0xa9650, corba_object=0xb0df8, 
    iid=0x763f8 "OAFIID:GNOME_Evolution_Shell", 
    local_directory=0xa9330 "/export/home/gnome/evolution", show_splash=1) at
e-shell.c:741
#10 0x34b98 in e_shell_new (local_directory=0xa9330
"/export/home/gnome/evolution", 
    show_splash=1) at e-shell.c:789
#11 0x45a34 in idle_cb (data=0xa9330) at main.c:150
---Type <return> to continue, or q <return> to quit---
#12 0xfeb0ee38 in g_idle_dispatch (source_data=0x45a00,
dispatch_time=0xffbeefc8, 
    user_data=0xa9330) at gmain.c:1367
#13 0xfeb0cc24 in g_main_dispatch (dispatch_time=0xffbeefc8) at gmain.c:656
#14 0xfeb0d9a8 in g_main_iterate (block=1, dispatch=1) at gmain.c:877
#15 0xfeb0dca0 in g_main_run (loop=0xa9cf8) at gmain.c:935
#16 0xfe99fc64 in gtk_main () at gtkmain.c:476
#17 0xfe4ee2fc in bonobo_main () at bonobo-main.c:275
#18 0x45de0 in main (argc=1, argv=0xffbef2ac) at main.c:212

--gdb output end--

We ran the following debug commands:

   % export CAMEL_VERBOSE_DEBUG=1
   % evolution-mail

And then in another window, ran this command:

   % evolution

In the window where we ran evolution-mail, the following output
was displayed:

--evolution-mail output start--

Gdk-WARNING **: locale not supported by C library
evolution-mail: Yeeeh! We have an owner!
loading rules /opt/GNOME-debug/share/evolution/vfoldertypes.xml 
   /export/home/gnome/evolution/vfolders.xml
Segmentation Fault

--evolution-mail output end

A core file is created, and has the following output when the following
command
is run:

   % file core

--file core output start--

core:           ELF 32-bit MSB core file SPARC Version 1, from 'evolution-mail'

--file core output end--

So it seems that evolution-mail is having a segmentation fault.  I assume that
evolution-mail is being launched by evolution.  I am not sure how to tell the
gdb debugger to let me place breakpoints, etc. from within this launched
evolution-mail program.  Any ideas?

Using gdb to do a traceback against the evolution-mail core file generates the
following output:

   Note that the do_register_folder function has the following prototype:

      static void do_register_folder (gpointer in_data, gpointer op_data,
         CamelException *ex)

   Also note that in the following trace the following things are true about
   the call to do_register_folder():
     + The "op_data" variable is not used in this function, so passing a null
       value seems to be okay.
     + Note the "ex" value is not null.

--gdb traceback start--

#0  0xfde32f04 in strlen () from /usr/lib/libc.so.1
#1  0xfde82738 in _doprnt () from /usr/lib/libc.so.1
#2  0xfde84374 in printf () from /usr/lib/libc.so.1
#3  0x46308 in do_register_folder (in_data=0x1023f0, op_data=0x0, ex=0x1160a0)
    at mail-local.c:817
#4  0x465d0 in local_storage_new_folder_cb (storage_listener=0x1023b0, 
    path=0x10315c "/Trash", folder=0xffbedfb0, data=0x102178) at
mail-local.c:887
#5  0xfe922fd0 in gtk_marshal_NONE__POINTER_POINTER (object=0x1023b0, 
    func=0x464ac <local_storage_new_folder_cb>, func_data=0x102178,
args=0xffbedba8)
    at gtkmarshal.c:376
#6  0xfe990d70 in gtk_handlers_run (handlers=0xdce00, signal=0xffbedb00,
object=0x1023b0, 
    params=0xffbedba8, after=0) at gtksignal.c:1917
#7  0xfe98f0b8 in gtk_signal_real_emit (object=0x1023b0, signal_id=68,
params=0xffbedba8)
    at gtksignal.c:1477
#8  0xfe98a704 in gtk_signal_emit (object=0x1023b0, signal_id=68) at
gtksignal.c:552
#9  0x68e40 in impl_GNOME_Evolution_StorageListener_notifyFolderCreated
(servant=0x116758, 
    path=0x10315c "/Trash", folder=0xffbedfb0, ev=0xffbee058)
    at evolution-storage-listener.c:93
#10 0x6ee38 in _ORBIT_skel_GNOME_Evolution_StorageListener_notifyFolderCreated
(
    _ORBIT_servant=0x116758, _ORBIT_recv_buffer=0xf1168, ev=0xffbee058, 
    _impl_notifyFolderCreated=0x68d90
<impl_GNOME_Evolution_StorageListener_notifyFolderCreated>) at
Evolution-skels.c:796
#11 0xff0ab7d4 in ORBit_POA_handle_request (recv_buffer=0xf1168, poa=0xddae8)
    at orbit_poa.c:507
#12 0xff0afb54 in ORBit_handle_incoming_request (recv_buffer=0xf1168) at
server.c:89
#13 0xff0affec in ORBit_handle_incoming_message (recv_buffer=0xf1168) at
server.c:159
#14 0xff0568b0 in giop_recv_reply_buffer_use_multiple_2 (request_cnx=0x101790, 
    request_ids=0xffbee2a0, block_for_reply=1) at giop-msg-buffer.c:1024
#15 0xff0569cc in giop_recv_reply_buffer_use_2 (request_cnx=0x101790, 
    request_id=4290700060, block_for_reply=1) at giop-msg-buffer.c:1058
#16 0x61d50 in GNOME_Evolution_Storage_addListener (_obj=0x101be0,
listener=0x103060, 
    ev=0xffbee390) at Evolution-stubs.c:1273
#17 0x46aa0 in mail_local_storage_startup (shellclient=0xfb188, 
    evolution_path=0xfb1b0 "/export/home/gnome/evolution") at
mail-local.c:1003
#18 0x2abc0 in owner_set_cb (shell_component=0xfaff8, shell_client=0xfb188, 
    evolution_homedir=0xfefd0 "/export/home/gnome/evolution", user_data=0x0)
    at component-factory.c:198
---Type <return> to continue, or q <return> to quit---
#19 0xfe922fd0 in gtk_marshal_NONE__POINTER_POINTER (object=0xfaff8, 
    func=0x2aac4 <owner_set_cb>, func_data=0x0, args=0xffbee650) at
gtkmarshal.c:376
#20 0xfe990d70 in gtk_handlers_run (handlers=0xdcea0, signal=0xffbee5a8,
object=0xfaff8, 
    params=0xffbee650, after=0) at gtksignal.c:1917
#21 0xfe98f0b8 in gtk_signal_real_emit (object=0xfaff8, signal_id=65,
params=0xffbee650)
    at gtksignal.c:1477
#22 0xfe98a704 in gtk_signal_emit (object=0xfaff8, signal_id=65) at
gtksignal.c:552
#23 0x67e48 in impl_ShellComponent_set_owner (servant=0xeb208, shell=0xff018, 
    evolution_homedir=0xfefd0 "/export/home/gnome/evolution", ev=0xffbeeae0)
    at evolution-shell-component.c:149
#24 0x6cd80 in _ORBIT_skel_GNOME_Evolution_ShellComponent_setOwner (
    _ORBIT_servant=0xeb208, _ORBIT_recv_buffer=0xf1108, ev=0xffbeeae0, 
    _impl_setOwner=0x67d04 <impl_ShellComponent_set_owner>) at
Evolution-skels.c:163
#25 0xff0ab7d4 in ORBit_POA_handle_request (recv_buffer=0xf1108, poa=0xddae8)
    at orbit_poa.c:507
#26 0xff0afb54 in ORBit_handle_incoming_request (recv_buffer=0xf1108) at
server.c:89
#27 0xff0affec in ORBit_handle_incoming_message (recv_buffer=0xf1108) at
server.c:159
#28 0xff0541c8 in giop_main_handle_connection (connection=0xfee68) at
connection.c:1211
#29 0xff1db228 in orb_handle_connection (source=0xfd3c8, cond=G_IO_IN,
cnx=0xfee68)
    at oaf-mainloop.c:69
#30 0xfe339bb0 in g_io_unix_dispatch (source_data=0xfcb20,
current_time=0xffbeeec8, 
    user_data=0xfee68) at giounix.c:135
#31 0xfe33cc24 in g_main_dispatch (dispatch_time=0xffbeeec8) at gmain.c:656
#32 0xfe33d9a8 in g_main_iterate (block=1, dispatch=1) at gmain.c:877
#33 0xfe33dca0 in g_main_run (loop=0xfae60) at gmain.c:935
#34 0xfe91fc64 in gtk_main () at gtkmain.c:476
#35 0xff16e2fc in bonobo_main () at bonobo-main.c:275
#36 0x539dc in main (argc=4, argv=0xffbef144) at main.c:99

--gdb traceback end--

On with the analysis of the information that we do have...

Line 817 of mail-local.c reads as follows

        printf("got folder exception %s\n", camel_exception_get_description(ex));

Therefore, the problem must be in the camel_exception_get_description()
function
perhaps returning a null value.  The camel_exception_get_description()
function
reads as follows:

---camel_exception_get_description start--

const gchar *
camel_exception_get_description (CamelException *ex)
{
        char *ret = NULL;

        if (ex)
                        ret = ex->desc;

        return ret;
}

---camel_exception_get_description start--

As noted in the above gdb traceback, the "ex" value is not null.  Therefore,
my guess is that the ex->desc value is possibly null. 

While running gdb on the core file we ran the folling commands:

   up
   up
   up
   print *ex

And got the following output

   $3 = {id = CAMEL_EXCEPTION_NONE, desc = 0x0}

This confirms that the ex->desc value is null in this situation.  

We found that removing line 817 of mail-local.c and recompiling seems to
make evolution start properly, though we are not sure of the ramifications
of removing this line.

Brian Cameron and Laszlo Peter
Sun Gnome Team Engineers




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