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 350041 - Saying "No" to file overwrite when ripping a CD hangs the GUI
Saying "No" to file overwrite when ripping a CD hangs the GUI
Status: RESOLVED FIXED
Product: rhythmbox
Classification: Other
Component: Removable Media
HEAD
Other Linux
: Normal normal
: ---
Assigned To: RhythmBox Maintainers
RhythmBox Maintainers
Depends on:
Blocks:
 
 
Reported: 2006-08-05 10:02 UTC by Alex Lancaster
Modified: 2008-11-18 11:54 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Alex Lancaster 2006-08-05 10:02:38 UTC
1. Rip a CD.

2. Quit and restart rhythmbox

3. Attempt to re-rip same CD.  Since there is already a file from previous rip, a dialog box is produced "do you want to overwrite the file?"  

4. Select "No", produces another dialog box behind the first one with "could not open vfs file <uri>: file exists".

5. At this point the interface hangs and RB requires a restart.  (saying "Yes" is fine it proceeds to overwrites old file).

Upon investigation it appears that the encoder is going to the next track, because I can see in the debug log: 

"rb_shell_transfer_progress_cb] rhythmbox/shell/rb-shell.c:1798: transferred 1 tracks out of 12" 

meaning that the encoder thinks it has handled the track (it's gone from 0 to 1), but the dialog from the error callback hangs the GUI.

On IRC Doc suggested gnomevfs_allow_overwrite_cb() probably needs to use GDK_THREADS

I managed a workaround by including gdk_threads_init(); then GDK_THREADS_ENTER(); at the beginning of the above function function, and a GDK_THREADS_LEAVE(); at the end, but it still generates those gnomevfs "error" dialogs which have to be dismissed *after* all of the "Skip this track?" dialogs are acted on.

Doc later suggested that:

> probably need to set a flag when we cancel, and make it not propagate the 
> error from gstreamer if it's set

and:

> in fact, RBEncoder should probably have an "overwrite" signal, and the dialog 
> stuff done above it

and further that you would need:

> a boolean true-stops-signal accumulator
Comment 1 Jonathan Matthew 2008-11-18 11:54:59 UTC
This works properly now.