Package: beep-media-player Severity: wishlist Tags: patch Dear beep-media-player maintainers,
forwarding an excerpt from the README of the upcoming xmms-crossfade release: | * There is a serious problem on some systems: Users who have the | NPTL (Native Posix Thread Libary) version of glibc instaleld on | their systems will experience a lockup or SEGFAULT when exitting | XMMS while a song is being played using XMMS-crossfade. This is | because of a bug in the NPTL implementation: | | http://sources.redhat.com/bugzilla/show_bug.cgi?id=654 | | Fortunatelly, there is a workaround, which (unfortunatelly) requires | a patch to XMMS itself. As of version 0.3.9 of XMMS-crossfade, these | patches (for BMP and Audacious as well) are included in the | distribution. It is now up to the developers and/or maintainers of | the players to incorporate the (fully transparent) patch into their | programs. Further background can be found at <http://groups.google.de/group/comp.programming.threads/browse_thread/thread/9e4e6cd0e95f9a1/17b4c7a4f35bd1c5>. For reference, the bug that raised this issue was initially reported as <http://bugs.debian.org/240186> (X-Debbugs-CC'd). Thus now forwarding the attached patch by Peter Eisenlohr <[EMAIL PROTECTED]> (xmms-crossfade upstream) for bmp, generated against bmp-0.9.7.1. Unfortunately I haven't tested it yet as currently bmp is uninstallable due to the libstdc++ allocator change transition. The upcoming crossfade package will have support for bmp, so please consider including the patch while this bug is not yet fixed in glibc. However, as this is not a bug in xmms per se, perhaps you'll prefer to tag this wontfix and we better wait for glibc... Cheers, Flo
diff -ur bmp-0.9.7.1/beep/mainwin.c bmp-0.9.7.1.patched/beep/mainwin.c
--- bmp-0.9.7.1/beep/mainwin.c 2005-05-09 10:45:39.000000000 +0200
+++ bmp-0.9.7.1.patched/beep/mainwin.c 2005-11-25 00:03:59.000000000 +0100
@@ -655,9 +655,11 @@
mainwin_set_shade(!cfg.player_shaded);
}
+gboolean is_quitting = FALSE;
void
mainwin_quit_cb(void)
{
+ is_quitting = TRUE;
gtk_widget_hide(equalizerwin);
gtk_widget_hide(playlistwin);
gtk_widget_hide(mainwin);
@@ -1318,7 +1320,7 @@
change_song(guint pos)
{
if (bmp_playback_get_playing())
- bmp_playback_stop();
+ bmp_playback_stop_for_restart();
playlist_set_position(pos);
bmp_playback_initiate();
diff -ur bmp-0.9.7.1/beep/playback.c bmp-0.9.7.1.patched/beep/playback.c
--- bmp-0.9.7.1/beep/playback.c 2005-01-26 06:56:15.000000000 +0100
+++ bmp-0.9.7.1.patched/beep/playback.c 2005-11-25 00:03:59.000000000 +0100
@@ -89,7 +89,7 @@
return;
if (bmp_playback_get_playing())
- bmp_playback_stop();
+ bmp_playback_stop_for_restart();
vis_clear_data(mainwin_vis);
vis_clear_data(playlistwin_vis);
@@ -135,6 +135,15 @@
get_current_input_plugin()->pause(ip_data.paused);
}
+gboolean input_stopped_for_restart = FALSE;
+void
+bmp_playback_stop_for_restart(void)
+{
+ input_stopped_for_restart = TRUE;
+ bmp_playback_stop();
+ input_stopped_for_restart = FALSE;
+}
+
void
bmp_playback_stop(void)
{
diff -ur bmp-0.9.7.1/beep/playback.h bmp-0.9.7.1.patched/beep/playback.h
--- bmp-0.9.7.1/beep/playback.h 2004-12-04 10:04:26.000000000 +0100
+++ bmp-0.9.7.1.patched/beep/playback.h 2005-11-25 00:03:59.000000000 +0100
@@ -26,6 +26,7 @@
void bmp_playback_initiate(void);
void bmp_playback_pause(void);
void bmp_playback_stop(void);
+void bmp_playback_stop_for_restart(void);
gboolean bmp_playback_play_file(const gchar * filename);
gboolean bmp_playback_get_playing(void);
gboolean bmp_playback_get_paused(void);
diff -ur bmp-0.9.7.1/beep/playlist.c bmp-0.9.7.1.patched/beep/playlist.c
--- bmp-0.9.7.1/beep/playlist.c 2005-08-11 09:25:51.000000000 +0200
+++ bmp-0.9.7.1.patched/beep/playlist.c 2005-11-25 00:03:59.000000000 +0100
@@ -817,7 +817,7 @@
if (bmp_playback_get_playing()) {
/* We need to stop before changing playlist_position */
PLAYLIST_UNLOCK();
- bmp_playback_stop();
+ bmp_playback_stop_for_restart();
PLAYLIST_LOCK();
restart_playing = TRUE;
}
@@ -868,7 +868,7 @@
if (bmp_playback_get_playing()) {
/* We need to stop before changing playlist_position */
PLAYLIST_UNLOCK();
- bmp_playback_stop();
+ bmp_playback_stop_for_restart();
PLAYLIST_LOCK();
restart_playing = TRUE;
}
@@ -1018,7 +1018,7 @@
if (bmp_playback_get_playing()) {
/* We need to stop before changing playlist_position */
PLAYLIST_UNLOCK();
- bmp_playback_stop();
+ bmp_playback_stop_for_restart();
PLAYLIST_LOCK();
restart_playing = TRUE;
}
@@ -1047,7 +1047,10 @@
{
GList *plist_pos_list;
- bmp_playback_stop();
+ if (cfg.repeat)
+ bmp_playback_stop_for_restart();
+ else
+ bmp_playback_stop();
PLAYLIST_LOCK();
plist_pos_list = find_playlist_position_list();
signature.asc
Description: Digital signature

