Bug 45537 - version == hash_table->version assertion failure when disposing the vCard manager
Summary: version == hash_table->version assertion failure when disposing the vCard man...
Status: NEW
Alias: None
Product: Telepathy
Classification: Unclassified
Component: gabble (show other bugs)
Version: unspecified
Hardware: Other All
: medium normal
Assignee: Telepathy bugs list
QA Contact: Telepathy bugs list
Depends on:
Reported: 2012-02-02 04:26 UTC by Guillaume Desmottes
Modified: 2013-02-25 17:28 UTC (History)
2 users (show)

See Also:
i915 platform:
i915 features:


Note You need to log in before you can comment on or make changes to this bug.
Description Guillaume Desmottes 2012-02-02 04:26:09 UTC
Original bug report: https://bugs.launchpad.net/ubuntu/+source/telepathy-gabble/+bug/915015

I observed this once as well when running master iirc.

#0  g_logv (log_domain=0xb710b66e "GLib", log_level=<optimized out>, format=0xb7113a5e "%s: assertion `%s' failed", args1=0xbfbc7d2c " \370\020\267t\365\020\267\255\001") at /build/buildd/glib2.0-2.31.8/./glib/gmessages.c:765
        domain = 0x0
        data = <optimized out>
        depth = <optimized out>
        log_func = <optimized out>
        domain_fatal_mask = <optimized out>
        masquerade_fatal = <optimized out>
        test_level = <optimized out>
        was_fatal = 0
        was_recursion = 0
        i = <optimized out>
#1  0xb70d00b3 in g_log (log_domain=0xb710b66e "GLib", log_level=G_LOG_LEVEL_CRITICAL, format=0xb7113a5e "%s: assertion `%s' failed") at /build/buildd/glib2.0-2.31.8/./glib/gmessages.c:792
        args = 0xbfbc7d2c " \370\020\267t\365\020\267\255\001"
#2  0xb70d00fd in g_return_if_fail_warning (log_domain=0xb710b66e "GLib", pretty_function=0xb710f820 "g_hash_table_foreach", expression=0xb710f574 "version == hash_table->version") at /build/buildd/glib2.0-2.31.8/./glib/gmessages.c:801
No locals.
#3  0xb70b8328 in g_hash_table_foreach (hash_table=0x993c808, func=0x8108e50 <disconnect_entry_foreach>, user_data=0x0) at /build/buildd/glib2.0-2.31.8/./glib/ghash.c:1510
        node_hash = <optimized out>
        node_key = <optimized out>
        node_value = <optimized out>
        i = <optimized out>
        version = 190
        __PRETTY_FUNCTION__ = "g_hash_table_foreach"
#4  0x08109df7 in gabble_vcard_manager_dispose (object=0x99318c8) at vcard-manager.c:590
        self = 0x99318c8
        priv = 0x99318d8
        __PRETTY_FUNCTION__ = "gabble_vcard_manager_dispose"
#5  0xb718f922 in g_object_unref (_object=0x99318c8) at /build/buildd/glib2.0-2.31.8/./gobject/gobject.c:2971
        weak_locations = 0x0
        object = 0x99318c8
        old_ref = <optimized out>
        __PRETTY_FUNCTION__ = "g_object_unref"
#6  0x080c4aa5 in gabble_connection_dispose (object=0x9924440) at connection.c:1211
        _tp_clear_pointer_tmp = <optimized out>
        self = 0x9924440
        base = 0x9924440
        priv = 0x9924548
        __PRETTY_FUNCTION__ = "gabble_connection_dispose"
#7  0xb718f922 in g_object_unref (_object=0x9924440) at /build/buildd/glib2.0-2.31.8/./gobject/gobject.c:2971
        weak_locations = 0x0
        object = 0x9924440
        old_ref = <optimized out>
        __PRETTY_FUNCTION__ = "g_object_unref"
#8  0xb718fab2 in g_value_object_free_value (value=0x9db8f30) at /build/buildd/glib2.0-2.31.8/./gobject/gobject.c:3291
No locals.
#9  0xb71b15c6 in g_value_unset (value=0x9db8f30) at /build/buildd/glib2.0-2.31.8/./gobject/gvalue.c:276
        value_table = <optimized out>
        __PRETTY_FUNCTION__ = "g_value_unset"
#10 0xb71a50f6 in g_signal_emit_valist (instance=0x9924440, signal_id=18, detail=0, var_args=<optimized out>) at /build/buildd/glib2.0-2.31.8/./gobject/gsignal.c:3063
        instance_and_params = 0x9db8f30
        signal_return_type = 4
        param_values = 0x9db8f44
        node = 0x0
        i = <optimized out>
        n_params = 0
        __PRETTY_FUNCTION__ = "g_signal_emit_valist"
#11 0xb71a5253 in g_signal_emit (instance=0x9924440, signal_id=18, detail=0) at /build/buildd/glib2.0-2.31.8/./gobject/gsignal.c:3090
        var_args = 0xbfbc804c ">>"
#12 0xb7409598 in tp_base_connection_finish_shutdown (self=0x9924440) at base-connection.c:2697
        contexts = 0xb6372998
        i = <optimized out>
        __PRETTY_FUNCTION__ = "tp_base_connection_finish_shutdown"
#13 0x080c58fd in force_close_cb (source=0x9910c10, res=0x9d9c6a8, user_data=0x9924440) at connection.c:1636
        self = <optimized out>
        base = 0x9924440
        error = 0x0
        __PRETTY_FUNCTION__ = "force_close_cb"
#14 0xb7263500 in g_simple_async_result_complete (simple=0x9d9c6a8) at /build/buildd/glib2.0-2.31.8/./gio/gsimpleasyncresult.c:744
        current_source = <optimized out>
        current_context = <optimized out>
        __PRETTY_FUNCTION__ = "g_simple_async_result_complete"
#15 0x08098972 in connection_force_close_cb (source=0x9d0b560, res=0x9d236f0, user_data=0x9910c10) at wocky-c2s-porter.c:1257
        self = 0x9910c10
        priv = 0x9910c20
        r = 0x9d9c6a8
        error = 0x0
        __PRETTY_FUNCTION__ = "connection_force_close_cb"
#16 0xb7263500 in g_simple_async_result_complete (simple=0x9d236f0) at /build/buildd/glib2.0-2.31.8/./gio/gsimpleasyncresult.c:744
        current_source = <optimized out>
        current_context = <optimized out>
        __PRETTY_FUNCTION__ = "g_simple_async_result_complete"
#17 0x0809b375 in stream_close_cb (source=0xb6304028, res=0x9d56870, user_data=0x9d0b560) at wocky-xmpp-connection.c:1191
        connection = <optimized out>
        priv = 0x9d0b570
        error = 0x0
        r = 0x9d236f0
#18 0xb72535ce in async_ready_close_callback_wrapper (source_object=0xb6304028, res=0x9d56870, user_data=0x9d0b560) at /build/buildd/glib2.0-2.31.8/./gio/giostream.c:435
        stream = 0xb6304028
#19 0xb7263500 in g_simple_async_result_complete (simple=0x9d56870) at /build/buildd/glib2.0-2.31.8/./gio/gsimpleasyncresult.c:744
        current_source = <optimized out>
        current_context = <optimized out>
        __PRETTY_FUNCTION__ = "g_simple_async_result_complete"
#20 0xb7263573 in complete_in_idle_cb_for_thread (_data=0x9d54cc8) at /build/buildd/glib2.0-2.31.8/./gio/gsimpleasyncresult.c:812
        data = 0x9d54cc8
        simple = 0x9d56870
#21 0xb70c5fd0 in g_idle_dispatch (source=0x9e12e78, callback=0xb7263540 <complete_in_idle_cb_for_thread>, user_data=0x9d54cc8) at /build/buildd/glib2.0-2.31.8/./glib/gmain.c:4632
No locals.
#22 0xb70c856a in g_main_dispatch (context=0x99074d0) at /build/buildd/glib2.0-2.31.8/./glib/gmain.c:2513
        dispatch = 0xb70c5fb0 <g_idle_dispatch>
        was_in_call = 0
        user_data = 0x9d54cc8
        callback = 0xb7263540 <complete_in_idle_cb_for_thread>
        cb_funcs = 0xb71784d8
        cb_data = 0x9e13a98
        current_source_link = {data = 0x9e12e78, next = 0x0}
        need_destroy = <optimized out>
        source = 0x9e12e78
        current = 0x9912d20
        i = <optimized out>
#23 g_main_context_dispatch (context=0x99074d0) at /build/buildd/glib2.0-2.31.8/./glib/gmain.c:3050
No locals.
#24 0xb70c8975 in g_main_context_iterate (dispatch=1, block=-1223859456, context=0x99074d0, self=<optimized out>) at /build/buildd/glib2.0-2.31.8/./glib/gmain.c:3121
        timeout = 0
        some_ready = 1
        fds = 0xb631fb08
        max_priority = 0
        nfds = <optimized out>
        allocated_nfds = <optimized out>
#25 g_main_context_iterate (context=0x99074d0, block=-1223859456, dispatch=1, self=<optimized out>) at /build/buildd/glib2.0-2.31.8/./glib/gmain.c:3058
        some_ready = 1
#26 0xb70c8dbb in g_main_loop_run (loop=0x990b5e8) at /build/buildd/glib2.0-2.31.8/./glib/gmain.c:3315
        __PRETTY_FUNCTION__ = "g_main_loop_run"
#27 0xb74d8920 in tp_run_connection_manager (prog_name=0x816592b "telepathy-gabble", version=0x817c313 "0.15.2", construct_cm=0x8071340 <construct_cm>, argc=1, argv=0xbfbc8494) at run.c:285
        connection = 0x9904ad0
        bus_daemon = 0x9908c58
        error = 0x0
        ret = 1
        __PRETTY_FUNCTION__ = "tp_run_connection_manager"
#28 0x080716b0 in gabble_main (argc=1, argv=0xbfbc8494) at gabble.c:179
        loader = 0x9902490
        out = <optimized out>
        fatal_mask = <optimized out>
#29 0x08071280 in main (argc=1, argv=0xbfbc8494) at main.c:33
No locals.
Comment 1 Will Thompson 2012-02-02 05:29:55 UTC
Taking a look at this. The problem, in broad terms, is:

#3  0xb70b8328 in g_hash_table_foreach (hash_table=0x993c808, func=0x8108e50
<disconnect_entry_foreach>, user_data=0x0) at

disconnect_entry_foreach, in some situations, ultimately ends up calling g_hash_table_remove(), thereby modifying the table being iterated. I haven't figured out exactly what that situation is, yet.
Comment 2 Will Thompson 2012-02-02 10:14:32 UTC
Can't figure out how to reproduce it, sorry.

This line in the backtrace:

#15 0x08098972 in connection_force_close_cb (source=0x9d0b560, res=0x9d236f0,
user_data=0x9910c10) at wocky-c2s-porter.c:1257

tells us that this was an unclean disconnection. My thinking was that we need a vcard cache entry with ->vcard_node, ->pipeline_item, and ->pending_requests to be NULL in order for the code in cache_entry_attempt_to_free() which modifies the hash table to fire, so I tried requesting a vCard, sending back an error of type='wait' to tell it to try again later, and then uncleanly disconnecting the connection in a variety of ways… but no dice.

I did make the surprising discovery that if I change connect/stream-closed.py to send a spurious stanza right before the </stream:stream>:

-    # server closes its stream
+    # server tells us it hates us then closes the stream cleanly.
+    stream.send(
+        elem('message', from_='lol@localhost')(
+          elem('body')(u'piss off')
+        ))

then the test fails! Gabble never sends the corresponding </stream:stream>. The issue seems to be related to the state transitions of WockyXmppConnection at the end of a stream when it gets a blob of data containing both a stanza and the </stream:stream> — if you stick a q.expect('dbus-signal', signal='MessageReceived') before sendFooter(), the test passes. But I couldn't track it down further. :(

So I am donating these bugs back to the public domain.
Comment 3 melchiaros 2013-02-01 16:53:53 UTC
On the launchpad report one of the users says:


"i can reproduce this bug. all i need is just switch off my internet or set offline status."
Comment 4 melchiaros 2013-02-01 16:55:32 UTC
This is still actual with the latest version of telepathy. No newer stacktrace is available(identification by apport on launchpad on stacktrace top).
Comment 5 Bilal shahid 2013-02-25 17:28:01 UTC
still affecting in ubuntu 13.04 with telepathy gabble 0.15.2-0ubuntu1

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.