GNOME Bugzilla – Bug 610477
should hang up calls gracefully rather than calling StreamHandler.Error()
Last modified: 2010-03-30 11:33:01 UTC
When Empathy ends a call, it seems to do so by calling Error() on the streams. This indicates an internal error in the streaming implementation, so (for instance) Gabble responds by sending <general-error/> in the stream-terminate stanza. Instead, Empathy should terminate the call gracefully, by using either RemoveMembers([self_handle]) or Close(). This will/should result in Gabble sending <success/> in the stream-terminate stanza. If it's necessary to terminate the streams with Error(), I believe connection managers will send the right termination reason if you do so *after* ending the call?
I quickly hacked a branch doing that: http://git.collabora.co.uk/?p=user/cassidy/empathy;a=shortlog;h=refs/heads/hang-up-610477 It still need some more testing but could you try it and check if it works as you expected please?
Created attachment 155854 [details] [review] http://git.collabora.co.uk/?p=user/cassidy/empathy;a=shortlog;h=refs/heads/hang-up-610477 libempathy/empathy-call-handler.c | 2 +- libempathy/empathy-tp-call.c | 46 +++++++++++++++++++++++++++++++++++++ libempathy/empathy-tp-call.h | 2 + src/empathy-call-window.c | 13 +++++++++- 4 files changed, 60 insertions(+), 3 deletions(-)
Review of attachment 155854 [details] [review]: ::: libempathy/empathy-tp-call.c @@ +855,3 @@ + } + + array = g_array_sized_new (FALSE, FALSE, sizeof (TpHandle), 1); You could put this array on the stack, even though self_handle isn't assigned yet, because it's a point to the memory self_handle will be stored in. GArray array = { &self_handle, 1 };
This problem has been fixed in the development version. The fix will be available in the next major software release. Thank you for your bug report.