GNOME Bugzilla – Bug 149799
changing iradio genre while genre is filtered causes crash
Last modified: 2005-07-30 05:45:36 UTC
Distribution: Debian 3.1 Package: rhythmbox Severity: critical Version: GNOME2.6.1 0.8.5 Gnome-Distributor: Debian Synopsis: Changing radio station genre in RhythmBox crashed it Bugzilla-Product: rhythmbox Bugzilla-Component: General Bugzilla-Version: 0.8.5 BugBuddy-GnomeVersion: 2.0 (2.6.1.1) Description: Description of the crash: Says that it crashed and do I want to restart. Steps to reproduce the crash: 1. restricted radio station view to a single genre 2. tried to change the genre of one of the radio stations 3. crashed. Expected Results: the genre would change and the radio station would disappear from that view. How often does this happen? just once so far. Additional Information: Debian unstable. Debugging Information: Backtrace was generated from '/usr/bin/rhythmbox' (no debugging symbols found)...Using host libthread_db library "/lib/tls/libthread_db.so.1". (no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...[Thread debugging using libthread_db enabled] [New Thread 1089495712 (LWP 17503)] [New Thread 1124072368 (LWP 17507)] [Thread debugging using libthread_db enabled] [New Thread 1089495712 (LWP 17503)] [New Thread 1124072368 (LWP 17507)] [Thread debugging using libthread_db enabled] [New Thread 1089495712 (LWP 17503)] [New Thread 1124072368 (LWP 17507)] (no debugging symbols found)...[New Thread 1115683760 (LWP 17506)] (no debugging symbols found)...[New Thread 1107295152 (LWP 17505)] (no debugging symbols found)...[New Thread 1098906544 (LWP 17504)] (no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...0x40ba4431 in __waitpid_nocancel () from /lib/tls/libpthread.so.0
+ Trace 49233
Thread 1 (Thread 1089495712 (LWP 17503))
------- Bug moved to this database by unknown@bugzilla.gnome.org 2004-08-10 06:32 ------- Unknown version 0.8.5 in product rhythmbox. Setting version to "0.2". Unknown platform unknown. Setting to default platform "Other". Unknown milestone "unknown" in product "rhythmbox". Setting to default milestone for this product, '---' The original reporter of this bug does not have an account here. Reassigning to the person who moved it here, unknown@bugzilla.gnome.org. Previous reporter was fvc@cvbcvb.com. Setting to default status "UNCONFIRMED". Setting qa contact to the default for this product. This bug either had no qa contact or an invalid one.
*** Bug 146521 has been marked as a duplicate of this bug. ***
Thanks for the bug report. Unfortunately, that stack trace is not very useful in determining the cause of the crash. Please make sure that the package was compiled with debugging symbols and see http://bugzilla.gnome.org/getting-traces.cgi for more information about useful stack traces.
*** Bug 141619 has been marked as a duplicate of this bug. ***
*** Bug 153189 has been marked as a duplicate of this bug. ***
This is pretty difficult to fix in 0.8, unfortunately. The code to display internet radio is the same as the library bits, and since we didn't have tag writing in 0.8 the support for changing entry data doesn't really work. 0.9 doesn't crash on this but doesn't seem to update, needs more investigation.
*** Bug 146197 has been marked as a duplicate of this bug. ***
*** Bug 155680 has been marked as a duplicate of this bug. ***
*** Bug 169810 has been marked as a duplicate of this bug. ***
Created attachment 49947 [details] [review] giant nasty patch 1) Add an 'entry-removed' signal to RhythmDBQueryModel, so listeners can distinguish between entries that are actually removed and those merely filtered out temporarily, and change RhythmDBPropertyModel to use it instead of 'row-deleted'. To see what this fixes, use the search box in the iradio source, then edit the title of a stream so it no longer matches. Without this fix, the stream's genre either disappears (if there was only one stream with that genre) or gets its refcount messed up, causing crashes later. 2) Change the RhythmDB 'entry-changed' signal so it includes all changes for that entry. This fixes the situation where there are multiple changes for an entry, one of which causes it to no longer match a query. When handling the first entry-changed signal, the query model removed the entry, so it then ignored all subsequent signals. Property models were not updated because the query model was dropping the signals. This involves storing the changes as a mapping from entries to lists of changes, rather than a simple list. 3) Rework rhythmdb_query_model_entry_changed_cb() so it emits the property change signals whether the entry is removed or not. This allows property models to update refcounts properly. Without this fix, all the property model sees is the delete of an entry with the new property value - this is what was causing the crash. 4) Handle the RBPropertyView 'property-selection-reset' signal in the iradio source, so when the selected genre is removed, the query is reset correctly. The library source already does this properly. This should also fix crashes with tag writing, and it probably fixes bug 160358 too. Items 1 and 3 were originally patch-38 on my --bugs branch.
2005-07-30 James Livingston <jrl@ids.org.au> * sources/rb-iradio-source.c: (rb_iradio_source_constructor), (genre_selected_cb), (genre_selection_reset_cb): Handle the RBPropertyView 'property-selection-reset' signal in iradio source. * rhythmdb/rhythmdb-query-model.c: (rhythmdb_query_model_entry_changed_cb): correctly emit changed signals whether the entry was removed or not. * rhythmdb/rhythmdb-marshal.list: * rhythmdb/rhythmdb-property-model.c: (rhythmdb_property_model_set_property), (rhythmdb_property_model_entry_removed_cb): * rhythmdb/rhythmdb-query-model.c: (rhythmdb_query_model_class_init), (rhythmdb_query_model_filter_out_entry), (rhythmdb_query_model_remove_entry): * rhythmdb/rhythmdb-query-model.h: * rhythmdb/rhythmdb.c: (rhythmdb_class_init), (rhythmdb_init), (free_entry_changes), (emit_entry_changed), (rhythmdb_commit_internal), (rhythmdb_process_queued_entry_set_event), (rhythmdb_entry_sync), (rhythmdb_entry_set): * rhythmdb/rhythmdb.h: Emit 'entry-removed' signal from query model, to distinguish between removed and filters entried. Emit entry-changed signal for all changed properties. Patches from Jonathan Matthew <jonathan@kaolin.hn.org> (Closes 149799)