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 605088 - crash when there's a transcoding error
crash when there's a transcoding error
Status: RESOLVED OBSOLETE
Product: rhythmbox
Classification: Other
Component: general
HEAD
Other Linux
: Normal critical
: ---
Assigned To: RhythmBox Maintainers
RhythmBox Maintainers
: 590145 (view as bug list)
Depends on:
Blocks:
 
 
Reported: 2009-12-20 20:00 UTC by Christophe Fergeau
Modified: 2018-05-24 14:54 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Christophe Fergeau 2009-12-20 20:00:48 UTC
When drag and dropping a track to my ipod, I got a rhythmbox crash. I think it's because it can't write to the iPod for some reason. Here is the (partial) backtrace:

  • #0 rb_encoder_gst_encode
    at rb-encoder-gst.c line 1068
  • #1 rb_encoder_encode
    at rb-encoder.c line 240
  • #2 do_transfer
    at rb-removable-media-manager.c line 1183
  • #3 rb_removable_media_manager_queue_transfer
    at rb-removable-media-manager.c line 1224
  • #4 impl_paste
    at rb-removable-media-source.c line 408
  • #5 rb_source_paste
    at rb-source.c line 1115
  • #6 impl_receive_drag
    at rb-removable-media-source.c line 579
  • #7 rb_source_receive_drag
    at rb-source.c line 1408

What happens is that rb-encoder-gst.c:copy_track fails, so we go in the 
if (error) {

} block (around line 1064 in that file).

From this block, and "error" signal is emitted by the RbEncoder instance. This signal is caught in rb-removable-media-manager.c:error_cb which then cancels the encoding with rb_encoder_cancel. The gst backend emits a RbEncoder::completed signal from its rb_encoder_gst_cancel implemenation, which is caught by rb-removable-media-manager.c:completed_cb. And this callback does a g_object_unref (G_OBJECT (encoder)) which drops the last ref which was held on the encoder object. So when we go back from the rb_encoder_gst_emit_error call in the error handling block mentioned above, the RbGstEncoder object has been destroyed and bad things happen when we do try to use it after that in that same block.

Maybe the whole
                if (enc->priv->pipeline == NULL) {
                        rb_encoder_gst_emit_completed (enc);
                } else {
                        /* this will unref the pipeline and call emit_completed */
                        rb_encoder_gst_cancel (encoder);
                }

block can be dropped, but it seems we wouldn't call rb_encoder_gst_emit_completed (enc) when the pipeline is NULL
Comment 1 Jonathan Matthew 2010-03-13 10:33:09 UTC
*** Bug 590145 has been marked as a duplicate of this bug. ***
Comment 2 GNOME Infrastructure Team 2018-05-24 14:54:22 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to GNOME'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.gnome.org/GNOME/rhythmbox/issues/854.