Re: [Evolution] evolution-2.32.1 (FreeBSD HEAD) && calendar not working



El día Thursday, April 28, 2011 a las 04:13:40PM +0100, David Woodhouse escribió:

On Thu, 2011-04-28 at 16:54 +0200, Matthias Apitz wrote:

I've rebuild glib-2.26.1 and evo-exchange 2.32.3 (removing my changes)
with gcc46; the problem remains:

Server is up and running...
[Thread 2997d200 (LWP 100749/e-calendar-factory) exited]

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 29804300 (LWP 100639/initial thread)]
0x29e28d87 in ?? ()
(gdb) bt
#0  0x29e28d87 in ?? ()
#1  0x290edaf8 in g_hash_table_lookup () from
/usr/local/lib/libglib-2.0.so.0
#2  0x29f9e43e in e2k_autoconfig_lookup_option (
    option=0x29fcf520 "Disable-Plaintext") at _ctype.h:106 

Can you do that with debugging symbols for glib? That just *shouldn't*
crash; g_hash_table_lookup() is being given a valid, but empty, hash
table and should return NULL.

The world is broken.

Yes, it seems so.

I've compiled all, in that order: glib20, evo-dataserver 2.32.3 and evo-exchange 
2.32.3 with 'gcc46 -O0 -g' and the bt looks like always:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 29804300 (LWP 101032/initial thread)]
0x29e55d87 in ?? ()
(gdb) bt
#0  0x29e55d87 in ?? ()
#1  0x2910fb4d in g_hash_table_lookup_node (hash_table=0x29850e90, 
    key=0x29ffc520) at ghash.c:252
#2  0x2911067b in g_hash_table_lookup (hash_table=0x29850e90, key=0x29ffc520)
    at ghash.c:252
#3  0x29fcb43e in e2k_autoconfig_lookup_option (
    option=0x29ffc520 "Disable-Plaintext") at _ctype.h:106

the key=0x29ffc520 is fine 

(gdb) p (char *)key
$13 = 0x29ffc520 "Disable-Plaintext"

and if one looks into the code for g_hash_table_lookup_node() it reads
glib-2.26.1/glib/ghash.c:

g_hash_table_lookup_node (GHashTable    *hash_table,
                          gconstpointer  key)
{
  ...

  hash_value = (* hash_table->hash_func) (key);
  if (G_UNLIKELY (hash_value <= 1))
    hash_value = 2;

(gdb) p *hash_table
$15 = {size = 8, mod = 7, mask = 7, nnodes = 0, noccupied = 0, 
  nodes = 0x2a7f9b20, hash_func = 0x29e55d87, key_equal_func = 0x29e55d55, 
  ref_count = 1, version = 0, key_destroy_func = 0, value_destroy_func = 0}

I *think* there is no correct function pointer in the hash_table because #0 is
pointing in the air; but read_config() inserts one as:

        config_options = g_hash_table_new (e2k_ascii_strcase_hash,
                                            e2k_ascii_strcase_equal);

(gdb) p e2k_ascii_strcase_hash
$17 = {guint (gconstpointer)} 0x29fe16b7 <e2k_ascii_strcase_hash>
(gdb) p e2k_ascii_strcase_equal
$18 = {gint (gconstpointer, 
    gconstpointer)} 0x29fe1685 <e2k_ascii_strcase_equal>

What I also do not understand is that:

(gdb) up
#1  0x2913ab4d in g_hash_table_lookup_node (hash_table=0x29850e90, 
    key=0x2a087520) at ghash.c:252
252       for (i = 0; i < shift; i++)

i.e. the line number 252 and the code line presented by gdb does not
match the place where g_hash_table_lookup_node() is in ghash.c;

I'm now clueless :-(

        matthias

-- 
Matthias Apitz
t +49-89-61308 351 - f +49-89-61308 399 - m +49-170-4527211
e <guru unixarea de> - w http://www.unixarea.de/



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