Evolution Account Management - Report 07



Hey Folks,

during GUADEC I talked to my mentor, Srini, and we wanted to have a
simple program, which calls the email-account-settings widget from
Evolution. So that you can edit your email accounts without the need of
a running evolution. First problem was to convince automake to create a
new binary. With the help of great hackers at GUADEC, I could make it
create a binary but linking it was still a problem. Lucky me, the
necessary function which I needed to call is provided by a library, but
it depends on another library which it didn't pull automatically. But
Srini found the issue and fixed it for me.

To call the function is easy and it properly displays the very same
widget which Evolution does. But as soon as I click on Add or Edit, it
crashes. According to the stacktrace, it crashes in
mail_component_get_type, but I couldn't find any implementation! Don
Scorgie then told me to add another function with the same name, gcc
choked and told me that the implementation is hidden in a misterious
Bonobo Macro. Yummie.

Other crasher is weird as well. There is a hashtable in
camel_provider_list which is NULL. So I initialized it with
camel_provider_init, but it then crashes in weird class-macros:

camel-CRITICAL **: camel_object_class_cast: assertion `check_magic(k,
ctype, CAMEL_OBJECT_CLASS_MAGIC)' failed
aborting...

Program received signal SIGTRAP, Trace/breakpoint trap.
[Switching to Thread 0x7f2d4d3ca780 (LWP 9732)]
IA__g_logv (log_domain=0x7f2d49bb1ab4 "camel",
log_level=G_LOG_LEVEL_CRITICAL, format=0x7f2d400e51f4 "%s: assertion
`%s' failed",
    args1=0x7fff55413e80) at gmessages.c:503
503		  g_private_set (g_log_depth, GUINT_TO_POINTER (depth));
(gdb) bt
#0  IA__g_logv (log_domain=0x7f2d49bb1ab4 "camel",
log_level=G_LOG_LEVEL_CRITICAL, format=0x7f2d400e51f4 "%s: assertion
`%s' failed",
    args1=0x7fff55413e80) at gmessages.c:503
#1  0x00007f2d40097d53 in IA__g_log (log_domain=0x7f2d3f7cb9e0 "",
log_level=9896160, format=0x96efa0 "yptobitc\021\001")
    at gmessages.c:517
#2  0x00007f2d49ba2d98 in camel_object_class_cast (k=0x705170,
ctype=0x0) at camel-object.c:1094
#3  0x00007f2d4a280b51 in camel_service_class_init
(camel_service_class=0x7f2d3f7cb9e0) at camel-service.c:74
#4  0x00007f2d49ba2758 in camel_type_register (parent=0x0,
name=0x7f2d4a296e52 "CamelService", object_size=96, klass_size=224,
    class_init=0x7f2d4a280b30 <camel_service_class_init>,
class_finalise=0, object_init=0x7f2d4a281c10 <camel_service_init>,
    object_finalise=0x7f2d4a281640 <camel_service_finalize>) at
camel-object.c:783
#5  0x00007f2d4a280c61 in camel_service_get_type () at camel-service.c:138
#6  0x00007f2d4a287b25 in camel_store_get_type () at camel-store.c:171
#7  0x00007f2d4a290085 in camel_vee_store_get_type () at
camel-vee-store.c:60
#8  0x00007f2d4a27a96e in provider_setup () at camel-provider.c:82
#9  0x00007f2d437d6d23 in pthread_once () from /lib/libpthread.so.0
#10 0x00007f2d4a27a9e1 in camel_provider_init () at camel-provider.c:111
#11 0x00007f2d4a27acae in camel_provider_list (load=1) at
camel-provider.c:307
#12 0x00007f2d4cf54b75 in em_account_editor_new (account=0x96b3b0,
type=EMAE_NOTEBOOK,


As it's pretty impossible for me to fix those kind of bugs, I'll try to
pass an EShell to the mail-account-settings function, just as the real
evo does. It was quite a PITA to instantiate an EShell object, because
the function which creates a new EShell hasn't been in a library yet.
Thus I modified the Makefile stuff to include the necessary functions in
order to build my binary. That was cumbersome but in the end the library
was built. But apparently it crashes in an even worse location if I pass
a newly created EShell:
muelli xbox:~/svn/gnome/evolution/capplet$ gdb .libs/lt-capplet
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu"...
(gdb) r
Starting program: /home/muelli/svn/gnome/evolution/capplet/.libs/lt-capplet
[Thread debugging using libthread_db enabled]
[New Thread 0x7f4ae3aad780 (LWP 30847)]

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7f4ae3aad780 (LWP 30847)]
0x00007f4ada4f343e in PortableServer_POA_servant_to_reference (poa=0x0,
    p_servant=0x64c208, ev=0x7fffebaf8fb0) at poa.c:2316
2316		gboolean                    retain = IS_RETAIN (poa);
(gdb) bt
#0  0x00007f4ada4f343e in PortableServer_POA_servant_to_reference (poa=0x0,
    p_servant=0x64c208, ev=0x7fffebaf8fb0) at poa.c:2316
#1  0x00007f4adafe86d9 in do_corba_setup_T (object=0x64c1e0)
    at bonobo-object.c:791
#2  0x00007f4adafe87bd in bonobo_object_constructor (type=6679328,
    n_construct_properties=1, construct_properties=0x65ed50)
    at bonobo-object.c:845
#3  0x00007f4ad6788fdd in IA__g_object_newv (object_type=6679328,
    n_parameters=0, parameters=<value optimized out>) at gobject.c:937
#4  0x00007f4ad6789b02 in IA__g_object_new_valist (object_type=6679328,
    first_property_name=0x0, var_args=0x7fffebaf9260) at gobject.c:986
#5  0x00007f4ad6789c41 in IA__g_object_new (object_type=6679328,
    first_property_name=0x0) at gobject.c:795
#6  0x00007f4ae168cc45 in evolution_listener_new (
    complete=0x7f4ae16908d1 <set_line_status_complete>, data=0x64c180)
    at evolution-listener.c:64
#7  0x00007f4ae168f610 in e_shell_init (shell=0x64c180) at e-shell.c:551
#8  0x00007f4ad67a5143 in IA__g_type_create_instance (type=0) at
gtype.c:1575
#9  0x00007f4ad678a5bd in g_object_constructor (type=0,
    n_construct_properties=6603272, construct_params=0x7fffebaf8fb0)
    at gobject.c:1046
#10 0x00007f4adafe875f in bonobo_object_constructor (type=6664608,
    n_construct_properties=1, construct_properties=0x65e790)
---Type <return> to continue, or q <return> to quit---
    at bonobo-object.c:820
#11 0x00007f4ad6788fdd in IA__g_object_newv (object_type=6664608,
    n_parameters=0, parameters=<value optimized out>) at gobject.c:937
#12 0x00007f4ad6789b02 in IA__g_object_new_valist (object_type=6664608,
    first_property_name=0x0, var_args=0x7fffebaf9790) at gobject.c:986
#13 0x00007f4ad6789c41 in IA__g_object_new (object_type=6664608,
    first_property_name=0x0) at gobject.c:795
#14 0x00007f4ae168fbf9 in e_shell_new (
    startup_line_mode=E_SHELL_STARTUP_LINE_MODE_OFFLINE,
    construct_result_return=0x0) at e-shell.c:742
#15 0x0000000000401639 in main (argc=1, argv=0x7fffebaf99e8) at capplet.c:60
(gdb)


Maybe the construct_result_return is the culprit. But even by mimicking
./shell/main.c:412 with passing the address of a EShellConstructResult
it crashes right away.
So my problem is, that I can't make it not crash and to be frank, I
don't think that the problem is in glib or bonobo. But still, I am out
of ideas to check what the issue could be. So I'll appreciate any
suggestion.

For now, I am concentrating on ripping out the account management
functions into an own library. But not more today, my belly seems to be
fighting with some turkish delight...

Cheers,
  Tobi


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