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 149799 - changing iradio genre while genre is filtered causes crash
changing iradio genre while genre is filtered causes crash
Status: RESOLVED FIXED
Product: rhythmbox
Classification: Other
Component: Internet Radio
HEAD
Other other
: High critical
: ---
Assigned To: RhythmBox Maintainers
RhythmBox Maintainers
: 141619 146197 146521 153189 155680 169810 (view as bug list)
Depends on:
Blocks:
 
 
Reported: 2004-08-10 10:32 UTC by fvc
Modified: 2005-07-30 05:45 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
giant nasty patch (17.22 KB, patch)
2005-07-29 15:59 UTC, Jonathan Matthew
committed Details | Review

Description fvc 2004-08-10 10:32:47 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

Thread 1 (Thread 1089495712 (LWP 17503))

  • #0 __waitpid_nocancel
    from /lib/tls/libpthread.so.0
  • #1 libgnomeui_module_info_get
    from /usr/lib/libgnomeui-2.so.0
  • #2 <signal handler called>
  • #3 raise
    from /lib/tls/libc.so.6
  • #4 ??
    from /lib/tls/libc.so.6
  • #5 ??
  • #6 abort
    from /lib/tls/libc.so.6
  • #7 ??
  • #8 ??
  • #9 ??
  • #10 ??
  • #11 ??
  • #12 ??
  • #13 ??
  • #14 ??
  • #15 ??
  • #16 ??
  • #17 ??
  • #18 ??
  • #19 ??
  • #20 ??
  • #21 ??
  • #22 ??
  • #23 ??
  • #24 ??
  • #25 ??
  • #26 ??
  • #27 ??
  • #28 ??
  • #29 ??
  • #30 ??
  • #31 ??
  • #32 ??
  • #33 ??
  • #34 ??
  • #35 ??
  • #36 ??
  • #37 ??
  • #38 ??
  • #39 ??
  • #40 ??
  • #41 ??
  • #42 g_free
    from /usr/lib/libglib-2.0.so.0
  • #43 g_log
    from /usr/lib/libglib-2.0.so.0
  • #44 rhythmdb_property_model_new
  • #45 rhythmdb_property_model_new
  • #46 rhythmdb_property_model_new
  • #47 g_cclosure_marshal_VOID__BOXED
    from /usr/lib/libgobject-2.0.so.0
  • #48 g_closure_invoke
    from /usr/lib/libgobject-2.0.so.0
  • #49 g_signal_emit_by_name
    from /usr/lib/libgobject-2.0.so.0
  • #50 g_signal_emit_valist
    from /usr/lib/libgobject-2.0.so.0
  • #51 g_signal_emit
    from /usr/lib/libgobject-2.0.so.0
  • #52 gtk_tree_model_row_deleted
    from /usr/lib/libgtk-x11-2.0.so.0
  • #53 rhythmdb_query_model_get_duration
  • #54 rhythmdb_query_model_poll
  • #55 rhythmdb_query_model_get_duration
  • #56 g_main_context_wakeup
    from /usr/lib/libglib-2.0.so.0
  • #57 g_main_depth
    from /usr/lib/libglib-2.0.so.0
  • #58 g_main_context_dispatch
    from /usr/lib/libglib-2.0.so.0
  • #59 g_main_context_dispatch
    from /usr/lib/libglib-2.0.so.0
  • #60 g_main_loop_run
    from /usr/lib/libglib-2.0.so.0
  • #61 bonobo_main
    from /usr/lib/libbonobo-2.so.0
  • #62 main
  • #0 __waitpid_nocancel
    from /lib/tls/libpthread.so.0




------- 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.

Comment 1 Edward Rousseau 2004-08-12 21:45:28 UTC
*** Bug 146521 has been marked as a duplicate of this bug. ***
Comment 2 Edward Rousseau 2004-08-12 21:53:12 UTC
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.


Comment 3 Vincent Noel 2004-08-13 18:18:34 UTC
*** Bug 141619 has been marked as a duplicate of this bug. ***
Comment 4 Vincent Noel 2004-09-20 20:59:31 UTC
*** Bug 153189 has been marked as a duplicate of this bug. ***
Comment 5 Colin Walters 2004-09-23 20:10:57 UTC
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.
Comment 6 Colin Walters 2004-09-23 21:56:52 UTC
*** Bug 146197 has been marked as a duplicate of this bug. ***
Comment 7 Colin Walters 2004-10-21 18:26:16 UTC
*** Bug 155680 has been marked as a duplicate of this bug. ***
Comment 8 Christian Kirbach 2005-03-10 10:59:41 UTC
*** Bug 169810 has been marked as a duplicate of this bug. ***
Comment 9 Jonathan Matthew 2005-07-29 15:59:54 UTC
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.
Comment 10 James "Doc" Livingston 2005-07-30 05:44:56 UTC
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)