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...
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: 2019-12-03 19:55 UTC (History)
2 users (show)

See Also:
i915 platform:
i915 features:


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
Comment 6 GitLab Migration User 2019-12-03 19:55:31 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/telepathy/telepathy-gabble/issues/207.

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.