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 160358 - app crash when editing radio category
app crash when editing radio category
Status: RESOLVED FIXED
Product: rhythmbox
Classification: Other
Component: Internet Radio
unspecified
Other other
: High critical
: ---
Assigned To: RhythmBox Maintainers
RhythmBox Maintainers
Depends on:
Blocks:
 
 
Reported: 2004-12-02 17:41 UTC by odin
Modified: 2005-07-30 05:47 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description odin 2004-12-03 17:05:11 UTC
Distribution: Fedora Core release 3 (Heidelberg)
Package: rhythmbox
Severity: normal
Version: GNOME2.8.0 unspecified
Gnome-Distributor: Red Hat, Inc
Synopsis: app crash when editing radio category
Bugzilla-Product: rhythmbox
Bugzilla-Component: iradio
Bugzilla-Version: unspecified
BugBuddy-GnomeVersion: 2.0 (2.8.0)
Description:
Description of the crash:


Steps to reproduce the crash:
1. Add radio stationwith some category
2. Edit station category


Expected Results:
Crash


How often does this happen?
100%


Additional Information:



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)...[Thread debugging using libthread_db enabled]
[New Thread -151156512 (LWP 8122)]
[New Thread 58891184 (LWP 8126)]
[Thread debugging using libthread_db enabled]
[New Thread -151156512 (LWP 8122)]
[New Thread 58891184 (LWP 8126)]
[New Thread 48401328 (LWP 8125)]
[New Thread 124615600 (LWP 8124)]
[New Thread 26753968 (LWP 8123)]
(no debugging symbols found)...[Thread debugging using libthread_db
enabled]
[New Thread -151156512 (LWP 8122)]
[New Thread 58891184 (LWP 8126)]
(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)...(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)...0x0062e7a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2

Thread 5 (Thread 26753968 (LWP 8123))

  • #0 _dl_sysinfo_int80
    from /lib/ld-linux.so.2
  • #1 pthread_cond_wait
    from /lib/tls/libpthread.so.0
  • #2 g_async_queue_push
    from /usr/lib/libglib-2.0.so.0
  • #3 g_thread_pool_free
    from /usr/lib/libglib-2.0.so.0
  • #4 g_static_private_free
    from /usr/lib/libglib-2.0.so.0
  • #5 start_thread
    from /lib/tls/libpthread.so.0
  • #6 clone
    from /lib/tls/libc.so.6

Thread 4 (Thread 124615600 (LWP 8124))

  • #0 _dl_sysinfo_int80
    from /lib/ld-linux.so.2
  • #1 pthread_cond_timedwait
    from /lib/tls/libpthread.so.0
  • #2 ??
    from /usr/lib/libgthread-2.0.so.0
  • #3 ??
  • #4 ??
  • #5 ??
  • #6 ??
    from /usr/lib/libgthread-2.0.so.0
  • #7 ??
  • #8 ??

Thread 3 (Thread 48401328 (LWP 8125))

  • #0 _dl_sysinfo_int80
    from /lib/ld-linux.so.2
  • #1 pthread_cond_timedwait
    from /lib/tls/libpthread.so.0
  • #2 ??
    from /usr/lib/libgthread-2.0.so.0
  • #3 ??
  • #4 ??
  • #5 ??
  • #6 ??
    from /usr/lib/libgthread-2.0.so.0
  • #7 ??
  • #8 ??

Thread 2 (Thread 58891184 (LWP 8126))

  • #0 _dl_sysinfo_int80
    from /lib/ld-linux.so.2
  • #1 pthread_cond_timedwait
    from /lib/tls/libpthread.so.0
  • #2 ??
    from /usr/lib/libgthread-2.0.so.0
  • #3 ??
  • #4 ??
  • #5 ??
  • #6 __malloc_initialize_hook
    from /lib/tls/libc.so.6
  • #7 ??
    from /lib/tls/libc.so.6
  • #8 __malloc_initialize_hook
    from /lib/tls/libc.so.6
  • #9 ??
  • #10 ??
  • #11 free
    from /lib/tls/libc.so.6
  • #12 g_async_queue_push
    from /usr/lib/libglib-2.0.so.0
  • #13 g_async_queue_timed_pop
    from /usr/lib/libglib-2.0.so.0
  • #14 rhythmdb_entry_lookup_by_location
  • #15 rhythmdb_add_song
  • #16 ??
  • #17 ??
  • #18 ??
  • #19 ??
  • #20 ??
  • #21 ??
  • #22 ??
  • #23 _IO_stdin_used
  • #24 _IO_stdin_used
  • #25 rhythmdb_add_song
  • #26 ??
  • #27 ??
  • #28 ??
  • #29 g_static_private_free
    from /usr/lib/libglib-2.0.so.0




------- Bug moved to this database by unknown@bugzilla.gnome.org 2004-12-03 12:05 -------


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 odin@hogsbro.org.
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 Elijah Newren 2004-12-04 03:01:12 UTC
Appears to be a unique stack trace, according to the simple-dup-finder.
Comment 2 Christian Kirbach 2005-05-26 13:01:01 UTC
Does it still happen with the latest version?
Comment 3 Sven Arvidsson 2005-07-27 20:08:44 UTC
This still happens in 0.8.8, I can't reproduce it every time tough. Seems like
this happens mostly when you add a new radio station to the "Unknown" category,
and later to a completly new category, but I can be wrong...

Starting program: /usr/bin/rhythmbox
[Thread debugging using libthread_db enabled]
[New Thread -1219777824 (LWP 27831)]
[New Thread -1222333520 (LWP 27834)]
[New Thread -1230722128 (LWP 27835)]
[New Thread -1239110736 (LWP 27836)]
[New Thread -1247499344 (LWP 27837)]
[New Thread -1256129616 (LWP 27838)]
[New Thread -1264518224 (LWP 27839)]
[Thread -1264518224 (LWP 27839) exited]

RhythmDB-ERROR **: file rhythmdb-property-model.c: line 547
(rhythmdb_property_model_delete_prop): assertion failed: ((ptr =
g_hash_table_lookup (model->priv->reverse_map, propstr)))
aborting...

Program received signal SIGABRT, Aborted.
[Switching to Thread -1219777824 (LWP 27831)]
0x4104183b in raise () from /lib/tls/libc.so.6
(gdb) thread apply all bt

Thread 1 (Thread -1219777824 (LWP 27831))

  • #0 raise
    from /lib/tls/libc.so.6
  • #1 abort
    from /lib/tls/libc.so.6
  • #2 g_logv
    from /usr/lib/libglib-2.0.so.0
  • #3 g_log
    from /usr/lib/libglib-2.0.so.0
  • #4 g_assert_warning
    from /usr/lib/libglib-2.0.so.0
  • #5 rhythmdb_property_model_delete_prop
    at rhythmdb-property-model.c line 547
  • #6 rhythmdb_property_model_row_deleted_cb
    at rhythmdb-property-model.c line 534
  • #7 g_cclosure_marshal_VOID__BOXED
    from /usr/lib/libgobject-2.0.so.0
  • #8 g_closure_invoke
    from /usr/lib/libgobject-2.0.so.0
  • #9 g_signal_emit_by_name
    from /usr/lib/libgobject-2.0.so.0
  • #10 g_signal_emit_valist
    from /usr/lib/libgobject-2.0.so.0
  • #11 g_signal_emit
    from /usr/lib/libgobject-2.0.so.0
  • #12 gtk_tree_model_row_deleted
    from /usr/lib/libgtk-x11-2.0.so.0
  • #13 rhythmdb_query_model_poll
    at rhythmdb-query-model.c line 834
  • #14 idle_poll_model
    at rhythmdb-query-model.c line 861
  • #15 g_main_context_wakeup
    from /usr/lib/libglib-2.0.so.0
  • #16 g_main_depth
    from /usr/lib/libglib-2.0.so.0
  • #17 g_main_context_dispatch
    from /usr/lib/libglib-2.0.so.0
  • #18 g_main_context_dispatch
    from /usr/lib/libglib-2.0.so.0
  • #19 g_main_loop_run
    from /usr/lib/libglib-2.0.so.0
  • #20 bonobo_main
    from /usr/lib/libbonobo-2.so.0
  • #21 main
    at main.c line 202

Comment 4 Christian Kirbach 2005-07-27 21:06:22 UTC
seems to be a different error.

James, is the last stack trace sufficient or do we need to know the unknown 
function names as well?
Comment 5 James "Doc" Livingston 2005-07-28 05:20:28 UTC
I'm fairly sure it's the same error. I saw a similar problem when I was doing
work on audio cd support - rhythmdb_property_model_iter_from_string and
rhythmdb_property_model_delete_prop were getting passed empty strings.


I think (but I'm not sure) that the problem was caused due to different threads
using rhythmdb_commit

normally what happens is
1) a RhythmDbEntry is allocated
2) the properties of the entry are set
3) rhythmdb_commit() is called

what could happen
1) a RhythmDbEntry is allocated
2) some of the properties of the entry are set
3) a different thread calls rhythmdb_commit()
4) the rest of the properties of the entry are set
5) rhythmdb_commit() is called


This would mean that the property model gets told that some propertie aren't set
(are empty strings) and later they do get set; but as rhythmdb_entry_set is
used, not rhythmdb_entry_sync, the property model doesn't get notified of the
change.


Two solutions I can think of
a) make rhythmdb_commit() only apply to changes from the thread that calls it
b) make rhythmb_commit() not apply to newly created entires, and have a special
rhythmdb_commit_new_entry() or something

Neither of those will be trivial, so maybe someone else can think of a better
solution.
Comment 6 Christian Kirbach 2005-07-28 09:31:46 UTC
I am not familiar with RB internals, but have you considered using
a monitor? not sure if pthreads supports this, but we could ensure
mutual exclusion for rhythmdb_commit() this way.
Comment 7 James "Doc" Livingston 2005-07-28 15:57:50 UTC
The issue is that the calls (entry_new, entry_set x N, commit) should be an
atomic transaction that can't be committed half-way through, because otherwise
things watching for new entries get give the half-constructed entries.

Another possible solution that I've though of, is that we could give entries a
flag indicating whether they are "fully constructed". The flag would start off,
and there would be a function like rhythmdb_entry_mark_constructed() that gets
called just before the code constructing the entry calls commit(). commit() will
ignore any entry that does not have the flag set, so that half-constructed
entries are not comitted.

I can't think (off the top of my head) of any other rhythmdb usage that needs to
act as an atomic transaction.


An extra feature of this is that we can detect some bad usage of entry_set/sync.
entry_sync (sends change notification) should never be called before the entry
is "fully constructed", and I can't think of a good reason for using entry_set
(no change notification) after.
Comment 8 James "Doc" Livingston 2005-07-30 05:47:54 UTC
These crashes should be fixed by the patch attached to but 149799, which was
just committed to cvs. Please reopen if you can reproduce it with a version with
the patch applied.