After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 670585 - Got this when hanging up a connected call
Got this when hanging up a connected call
Status: RESOLVED DUPLICATE of bug 686311
Product: empathy
Classification: Core
Component: VoIP
2.33.x
Other Linux
: Normal normal
: 3.4
Assigned To: empathy-maint
empathy-maint
: 670532 (view as bug list)
Depends on:
Blocks:
 
 
Reported: 2012-02-22 09:24 UTC by Guillaume Desmottes
Modified: 2012-11-08 23:09 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
call-window: don't remove fs*conference if not in pipeline (3.58 KB, patch)
2012-03-06 17:19 UTC, Emanuele Aina
reviewed Details | Review

Description Guillaume Desmottes 2012-02-22 09:24:05 UTC
GStreamer-WARNING **: Element 'fsrawconference0' is not in bin 'pipeline1'

Program received signal SIGTRAP, Trace/breakpoint trap.
0x00007ffff420fe18 in g_logv (log_domain=0x380e6a3778 "GStreamer", log_level=G_LOG_LEVEL_WARNING, 
    format=0x380e6a4db0 "Element '%s' is not in bin '%s'", args1=0x7fffffffba48) at gmessages.c:758
758			G_BREAKPOINT ();
(gdb) bt
  • #0 g_logv
    at gmessages.c line 758
  • #1 g_log
    at gmessages.c line 792
  • #2 gst_bin_remove_func
    at gstbin.c line 1476
  • #3 empathy_call_window_conference_removed_cb
    at empathy-call-window.c line 2467
  • #4 ffi_call_unix64
    at ../src/x86/unix64.S line 75
  • #5 ffi_call
    at ../src/x86/ffi64.c line 486
  • #6 g_cclosure_marshal_generic
    at gclosure.c line 1189
  • #7 g_closure_invoke
    at gclosure.c line 774
  • #8 signal_emit_unlocked_R
    at gsignal.c line 3302
  • #9 g_signal_emit_valist
    at gsignal.c line 3033
  • #10 g_signal_emit
    at gsignal.c line 3090
  • #11 on_tf_channel_conference_removed_cb
    at empathy-call-handler.c line 661
  • #12 g_cclosure_marshal_VOID__OBJECT
    at gmarshal.c line 644
  • #13 g_closure_invoke
    at gclosure.c line 774
  • #14 signal_emit_unlocked_R
    at gsignal.c line 3302
  • #15 g_signal_emit_valist
    at gsignal.c line 3033
  • #16 g_signal_emit
    at gsignal.c line 3090
  • #17 channel_fs_conference_removed
    at channel.c line 681
  • #18 g_cclosure_marshal_VOID__OBJECT
    at gmarshal.c line 644
  • #19 g_closure_invoke
    at gclosure.c line 774
  • #20 signal_emit_unlocked_R
    at gsignal.c line 3302
  • #21 g_signal_emit_valist
  • #22 g_signal_emit
    at gsignal.c line 3090
  • #23 _tf_call_channel_put_conference
    at call-channel.c line 597
  • #24 tf_call_content_dispose
    at call-content.c line 373
  • #25 g_object_run_dispose
    at gobject.c line 1051
  • #26 g_ptr_array_foreach
    at garray.c line 1430
  • #27 tf_call_channel_dispose
    at call-channel.c line 253
  • #28 g_object_unref
    at gobject.c line 2971
  • #29 tf_channel_dispose
    at channel.c line 437
  • #30 g_object_unref
    at gobject.c line 2971
  • #31 on_call_state_changed_cb
    at empathy-call-handler.c line 197
  • #32 g_closure_invoke
    at gclosure.c line 774
  • #33 signal_emit_unlocked_R
    at gsignal.c line 3302
  • #34 g_signal_emit_valist
    at gsignal.c line 3033
  • #35 g_signal_emit
    at gsignal.c line 3090
  • #36 _tp_cli_channel_type_call_invoke_callback_for_call_state_changed
    at _gen/tp-cli-channel-body.h line 10033
  • #37 tp_proxy_signal_invocation_run
    at proxy-signals.c line 268
  • #38 g_idle_dispatch
    at gmain.c line 4629
  • #39 g_main_dispatch
    at gmain.c line 2510
  • #40 g_main_context_dispatch
    at gmain.c line 3047
  • #41 g_main_context_iterate
    at gmain.c line 3118
  • #42 g_main_context_iteration
    at gmain.c line 3179
  • #43 g_application_run
    at gapplication.c line 1496
  • #44 main
    at empathy-call.c line 259

Comment 1 Guillaume Desmottes 2012-02-22 13:36:11 UTC
*** Bug 670532 has been marked as a duplicate of this bug. ***
Comment 2 Guillaume Desmottes 2012-02-23 08:33:56 UTC
Here is what's happenning:

- The call connects; fsrawconference0 and fsrtpconference0 are received through TfChannel::fs-conference-added and added the the pipeline A
- Empathy hangs up the call. It calls Hangup() on the channel, destroys the pipeline A and create a new one B (to continue display preview and in preparation for a next call; empathy_call_window_reset_pipeline)
- TfChannel::fs-conference-removed is fired on the channel and Empathy tries to remove fsrawconference0 on B which doesn't contain the element as that's the new pipeline.
Comment 3 Emanuele Aina 2012-03-06 11:15:53 UTC
After hangup the flow is the something along these lines, where indentation represents direct calls and numbers in square brackets connect signal emissions to their callbacks:

empathy_call_window_hangup_cb
  empathy_call_handler_stop_call
    tp_call_channel_hangup_async --> [1]
  empathy_call_window_disconnected
    empathy_call_window_reset_pipeline

[1] on_call_state_changed_cb (state=TP_CALL_STATE_ENDED)
  tf_channel_dispose --> [2]

[2] empathy_call_window_conference_removed_cb

Thus the hangup on the channel will ultimately cause the removal of the conference element in empathy_call_window_conference_removed_cb(), but before that happens empathy_call_window_reset_pipeline() has already free'd the pipeline and replaced it with a new one.
Comment 4 Guillaume Desmottes 2012-03-06 13:31:53 UTC
Yeah so we should either disconnect the signal when we don't care about it any more or make the callback safer.
Comment 5 Emanuele Aina 2012-03-06 17:19:34 UTC
Created attachment 209103 [details] [review]
call-window: don't remove fs*conference if not in pipeline

On hangup the pipeline will be reset but a later callback would try
to remove the no longer existent farstrema "fsrawconference0" (or
"fsrtpconference0") element from the pipeline.

Keep track of the added element and remove it only if needed.
Comment 6 Guillaume Desmottes 2012-03-07 08:55:59 UTC
Review of attachment 209103 [details] [review]:

I don't really like this patch tbh; it looks pretty hacky to me. I'll investigate a bit and see if we can come with a proper solution.

::: src/empathy-call-window.c
@@ +2453,2 @@
   priv->notifiers = g_list_prepend (priv->notifiers, notifier);
+  // Track the conference element, as the pipeline could

Don't use C++ comments
Comment 7 Debarshi Ray 2012-11-08 23:09:14 UTC
I am pretty sure this is a duplicate of bug 686311 and has been fixed in master and gnome-3-6. Feel free to reopen if I am not.

My apologies for noticing that you had already written a patch. Sorry about that.

*** This bug has been marked as a duplicate of bug 686311 ***