1fbbb3f
diff -Nur audacious-plugins-fedora-1.5.1-orig/src/sndfile/plugin.c audacious-plugins-fedora-1.5.1/src/sndfile/plugin.c
1fbbb3f
--- audacious-plugins-fedora-1.5.1-orig/src/sndfile/plugin.c	2008-06-08 10:37:44.000000000 +0200
1fbbb3f
+++ audacious-plugins-fedora-1.5.1/src/sndfile/plugin.c	2009-06-05 00:35:29.000000000 +0200
1fbbb3f
@@ -47,6 +47,7 @@
1fbbb3f
 static gint song_length;
1fbbb3f
 static gint bit_rate = 0;
1fbbb3f
 static glong seek_time = -1;
1fbbb3f
+static volatile char pause_flag;
1fbbb3f
 
1fbbb3f
 static GThread *decode_thread;
1fbbb3f
 static GMutex *decode_mutex;
1fbbb3f
@@ -121,6 +122,7 @@
1fbbb3f
 plugin_init (void)
1fbbb3f
 {
1fbbb3f
     seek_time = -1;
1fbbb3f
+    pause_flag = 0;
1fbbb3f
 
1fbbb3f
     decode_mutex = g_mutex_new();
1fbbb3f
     decode_cond = g_cond_new();
1fbbb3f
@@ -362,6 +364,22 @@
1fbbb3f
     return TRUE;
1fbbb3f
 }
1fbbb3f
 
1fbbb3f
+static void do_seek (InputPlayback * playback) {
1fbbb3f
+   playback->output->flush (seek_time);
1fbbb3f
+   sf_seek (sndfile, (long long) seek_time * sfinfo.samplerate / 1000, SEEK_SET);
1fbbb3f
+   seek_time = -1;
1fbbb3f
+}
1fbbb3f
+
1fbbb3f
+static void do_pause (InputPlayback * playback) {
1fbbb3f
+   playback->output->pause (1);
1fbbb3f
+   while (pause_flag) {
1fbbb3f
+      if (seek_time != -1)
1fbbb3f
+         do_seek (playback);
1fbbb3f
+      g_usleep(50000);
1fbbb3f
+   }
1fbbb3f
+   playback->output->pause (0);
1fbbb3f
+}
1fbbb3f
+
1fbbb3f
 static gpointer
1fbbb3f
 play_loop (gpointer arg)
1fbbb3f
 {
1fbbb3f
@@ -407,17 +425,13 @@
1fbbb3f
             playback->eof = TRUE;
1fbbb3f
             playback->playing = FALSE;
1fbbb3f
 
1fbbb3f
-            g_mutex_unlock(decode_mutex);
1fbbb3f
             break;
1fbbb3f
         }
1fbbb3f
 
1fbbb3f
-        /* Do seek if seek_time is valid. */
1fbbb3f
-        if (seek_time >= 0) {
1fbbb3f
-            sf_seek (sndfile, (sf_count_t)((gint64)seek_time * (gint64)sfinfo.samplerate / 1000L),
1fbbb3f
-                     SEEK_SET);
1fbbb3f
-            playback->output->flush (seek_time);
1fbbb3f
-            seek_time = -1;
1fbbb3f
-        }
1fbbb3f
+        if (seek_time != -1)
1fbbb3f
+           do_seek (playback);
1fbbb3f
+        if (pause_flag)
1fbbb3f
+           do_pause (playback);
1fbbb3f
 
1fbbb3f
         if (playback->playing == FALSE)
1fbbb3f
             break;
1fbbb3f
@@ -477,7 +491,7 @@
1fbbb3f
 static void
1fbbb3f
 play_pause (InputPlayback *playback, gshort p)
1fbbb3f
 {
1fbbb3f
-    playback->output->pause(p);
1fbbb3f
+   pause_flag = p;
1fbbb3f
 }
1fbbb3f
 
1fbbb3f
 static void