I had an issue where Gabble got really confused when I tried to join a GTalk-hosted MUC but there was already someone else in the room (namely myself) with the nick ‘wjt’. It seems to be triggered by Google's server sending the <presence type='error'>...<conflict/></p> stanza *twice* for the nick that's in use; Gabble/Wocky (not sure which is at fault yet …) gets really messed up when it receives the second one.
(I'm working on this, so stealing the bug.)
(Specifically, when it gets the first rejection for ‘wjt’, Gabble tries ‘wjt_’; when it gets the second rejection for ‘wjt’ it *also* tries ‘wjt__’ and then everyone dies.)
Here's a fix. It's atop a different MUC fix for no good reason.
assigning back to the list in the hope that someone sees and reviews it!
+ # As far as Gabble's concerned, the two other participants joined + # immediately after we did. + handle, handle_, handle__, foobar_handle = conn.RequestHandles( + cs.HT_CONTACT, jids + ['%s/foobar_gmail.com' % room_jid]) + q.expect('dbus-signal', signal='MembersChangedDetailed', + predicate=lambda e: e.args[0:4] == [[foobar_handle], [], [], []]) + q.expect('dbus-signal', signal='MembersChangedDetailed', + predicate=lambda e: e.args[0:4] == [[handle], [], [], []]) This looks as if it could be racy. What if the MCD signals apear before RequestHandles returns? Everything else looks good.
(In reply to comment #5) > + # As far as Gabble's concerned, the two other participants joined > + # immediately after we did. > + handle, handle_, handle__, foobar_handle = conn.RequestHandles( > + cs.HT_CONTACT, jids + ['%s/foobar_gmail.com' % room_jid]) > + q.expect('dbus-signal', signal='MembersChangedDetailed', > + predicate=lambda e: e.args[0:4] == [[foobar_handle], [], [], []]) > + q.expect('dbus-signal', signal='MembersChangedDetailed', > + predicate=lambda e: e.args[0:4] == [[handle], [], [], []]) > > This looks as if it could be racy. What if the MCD signals apear before > RequestHandles returns? It does look suspicious. But libdbus/dbus-python (I forget which) reorders messages when making blocking calls, so it's actually safe.
http://cgit.freedesktop.org/telepathy/telepathy-gabble/commit/?id=18fb2c20f26b9ee8d4fbb67f47cf374752b866bc Will be in 0.11.11 (or 0.12.0 if I decide to call it that).
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.