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 690993 - segfault in rb_track_transfer_batch_check_profiles()
segfault in rb_track_transfer_batch_check_profiles()
Status: RESOLVED FIXED
Product: rhythmbox
Classification: Other
Component: general
2.96
Other Linux
: Normal blocker
: ---
Assigned To: RhythmBox Maintainers
RhythmBox Maintainers
Depends on:
Blocks:
 
 
Reported: 2013-01-02 11:09 UTC by Brian J. Murrell
Modified: 2013-01-02 14:13 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Brian J. Murrell 2013-01-02 11:09:59 UTC
Have what appears to be a pretty reproducible segfault here in 2.96.

If you need any more info, please don't hesitate to ask.

Thread 1 (Thread 0xb28918c0 (LWP 29012))

  • #0 gst_encoding_target_get_profiles
    at encoding-target.c line 174
  • #1 rb_track_transfer_batch_check_profiles
    at rb-track-transfer-batch.c line 256
  • #2 start_next_batch
    at rb-track-transfer-queue.c line 427
  • #3 rb_transfer_target_transfer
    at rb-transfer-target.c line 436
  • #4 impl_receive_drag
    at rb-media-player-source.c line 889
  • #5 rb_display_page_receive_drag
    at rb-display-page.c line 124
  • #6 display_page_tree_drag_received_cb
    at rb-shell.c line 3390
  • #7 rb_marshal_VOID__POINTER_POINTER
    at rb-marshal.c line 1950
  • #8 g_closure_invoke
    at /build/buildd/glib2.0-2.32.3/./gobject/gclosure.c line 777
  • #9 signal_emit_unlocked_R
    at /build/buildd/glib2.0-2.32.3/./gobject/gsignal.c line 3547
  • #10 g_signal_emit_valist
    at /build/buildd/glib2.0-2.32.3/./gobject/gsignal.c line 3296
  • #11 g_signal_emit
    at /build/buildd/glib2.0-2.32.3/./gobject/gsignal.c line 3352
  • #12 drop_received_cb
    at rb-display-page-tree.c line 406
  • #13 rb_marshal_VOID__OBJECT_INT_POINTER
    at rb-marshal.c line 1642
  • #14 g_closure_invoke
    at /build/buildd/glib2.0-2.32.3/./gobject/gclosure.c line 777
  • #15 signal_emit_unlocked_R
    at /build/buildd/glib2.0-2.32.3/./gobject/gsignal.c line 3547
  • #16 g_signal_emit_valist
    at /build/buildd/glib2.0-2.32.3/./gobject/gsignal.c line 3296
  • #17 g_signal_emit
    at /build/buildd/glib2.0-2.32.3/./gobject/gsignal.c line 3352
  • #18 rb_display_page_model_drag_data_received
    at rb-display-page-model.c line 136
  • #19 rb_tree_drag_dest_drag_data_received
    at rb-tree-dnd.c line 254
  • #20 rb_tree_dnd_drag_data_received_cb
    at rb-tree-dnd.c line 859
  • #21 _gtk_marshal_VOID__OBJECT_INT_INT_BOXED_UINT_UINT
    at /build/buildd/gtk+3.0-3.4.2/./gtk/gtkmarshalers.c line 5190
  • #22 g_closure_invoke
    at /build/buildd/glib2.0-2.32.3/./gobject/gclosure.c line 777
  • #23 signal_emit_unlocked_R
    at /build/buildd/glib2.0-2.32.3/./gobject/gsignal.c line 3547
  • #24 g_signal_emit_valist

Comment 1 Jonathan Matthew 2013-01-02 11:38:51 UTC
This was fixed some time after 2.96, probably in commit 7b362a4
Comment 2 Brian J. Murrell 2013-01-02 12:51:24 UTC
(In reply to comment #1)
> This was fixed some time after 2.96, probably in commit 7b362a4

Ahhh.  Thanks much for that info.  7b362a4 didn't apply to cleanly to 2.96.  I ended up massaging it as such:

--- a/shell/rb-track-transfer-batch.c	2012-03-10 05:22:26.000000000 -0500
+++ b/shell/rb-track-transfer-batch.c	2013-01-02 07:38:45.021949538 -0500
@@ -817,7 +817,7 @@ rb_track_transfer_batch_class_init (RBTr
 								     "encoding target",
 								     "GstEncodingTarget",
 								     GST_TYPE_ENCODING_TARGET,
-								     G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+								     G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
 	/**
 	 * RBTrackTransferBatch:source
 	 *
--- a/sources/rb-transfer-target.c	2012-03-10 05:22:26.000000000 -0500
+++ b/sources/rb-transfer-target.c	2013-01-02 07:43:49.871109600 -0500
@@ -392,18 +392,16 @@ rb_transfer_target_transfer (RBTransferT
 	GList *l;
 	RhythmDBEntryType *our_entry_type;
 	RBTrackTransferBatch *batch;
-	GstEncodingTarget *encoding_target;
 	gboolean start_batch = FALSE;
 
 	g_object_get (target,		/* hrm */
 		      "shell", &shell,
 		      "entry-type", &our_entry_type,
-		      "encoding-target", &encoding_target,
 		      NULL);
 	g_object_get (shell, "track-transfer-queue", &xferq, NULL);
 	g_object_unref (shell);
 
-	batch = rb_track_transfer_batch_new (encoding_target, NULL, G_OBJECT (target));
+	batch = rb_track_transfer_batch_new (NULL, NULL, G_OBJECT (target));
 	gst_encoding_target_unref (encoding_target);
 
 	g_signal_connect_object (batch, "get-dest-uri", G_CALLBACK (get_dest_uri_cb), target, 0);
@@ -433,6 +431,11 @@ rb_transfer_target_transfer (RBTransferT
 	g_object_unref (our_entry_type);
 
 	if (start_batch) {
+		GstEncodingTarget *encoding_target;
+		g_object_get (target, "encoding-target", &encoding_target, NULL);
+		g_object_set (batch, "encoding-target", encoding_target, NULL);
+		gst_encoding_target_unref (encoding_target);
+
 		rb_track_transfer_queue_start_batch (xferq, batch);
 	} else {
 		g_object_unref (batch);

Does that look about right?  The patch to rb-track-transfer-batch.c is pretty straightforward as is the first hunk of the patch to rb-transfer-target.c, but it's the second hunk in that file I am less sure about.

Thanks again.
Comment 3 Jonathan Matthew 2013-01-02 13:32:24 UTC
I don't think it's a good idea to cherry pick fixes back to older releases. Why not upgrade to 2.98?
Comment 4 Brian J. Murrell 2013-01-02 14:13:50 UTC
Well, it's the same-old-same-old distro run-around where they (Ubuntu -- which I'm nearing the end of my patience with -- probably jump to Fedora for any future installs) don't want to do full version package upgrades in a maintenance cycle and want to just backport patches for known issues, and I don't want to jump ahead and have to locally maintain yet another package.