+++ /dev/null
-diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp
-index ae4611c..99bb50d 100755
---- a/lib/service/servicemp3.cpp
-+++ b/lib/service/servicemp3.cpp
-@@ -245,6 +245,8 @@ eServiceMP3::eServiceMP3(eServiceReference ref)
- CONNECT(m_pump.recv_msg, eServiceMP3::gstPoll);
- m_aspect = m_width = m_height = m_framerate = m_progressive = -1;
-
-+ m_subs_behind_seek = 0;
-+ m_block_sub = FALSE;
- m_cur_rate=1.0;
- m_state = stIdle;
- eDebug("eServiceMP3::construct!");
-@@ -595,6 +597,7 @@ RESULT eServiceMP3::seekTo(pts_t to)
- RESULT ret = -1;
-
- if (m_gst_playbin) {
-+ m_block_sub = TRUE;
- eSingleLocker l(m_subs_to_pull_lock); // this is needed to dont handle incomming subtitles during seek!
- if (!(ret = seekToImpl(to)))
- {
-@@ -603,6 +606,13 @@ RESULT eServiceMP3::seekTo(pts_t to)
- m_decoder_time_valid_state = 0;
- m_subs_to_pull = 0;
- }
-+ m_block_sub = FALSE;
-+ }
-+ m_subs_to_pull+=m_subs_behind_seek;
-+ while(m_subs_behind_seek)
-+ {
-+ m_pump.send(Message(2));
-+ m_subs_behind_seek--;
- }
-
- return ret;
-@@ -616,6 +626,7 @@ RESULT eServiceMP3::trickSeek(gdouble ratio)
- if (!ratio)
- return seekRelative(0, 0);
-
-+ m_block_sub = TRUE;
- eSingleLocker l(m_subs_to_pull_lock);
-
- GstEvent *s_event;
-@@ -655,6 +666,13 @@ RESULT eServiceMP3::trickSeek(gdouble ratio)
- m_decoder_time_valid_state = 0;
- m_subs_to_pull = 0;
- m_cur_rate=ratio;
-+ m_block_sub = FALSE;
-+ m_subs_to_pull+=m_subs_behind_seek;
-+ while(m_subs_behind_seek)
-+ {
-+ m_pump.send(Message(2));
-+ m_subs_behind_seek--;
-+ }
- return 0;
- }
-
-@@ -1650,10 +1668,17 @@ eAutoInitPtr<eServiceFactoryMP3> init_eServiceFactoryMP3(eAutoInitNumbers::servi
-
- void eServiceMP3::gstCBsubtitleAvail(GstElement *appsink, gpointer user_data)
- {
-- eServiceMP3 *_this = (eServiceMP3*)user_data;
-- eSingleLocker l(_this->m_subs_to_pull_lock);
-- ++_this->m_subs_to_pull;
-- _this->m_pump.send(Message(2));
-+ eServiceMP3 *_this = (eServiceMP3*)user_data;
-+ if(_this->m_block_sub != TRUE)
-+ {
-+ eSingleLocker l(_this->m_subs_to_pull_lock);
-+ ++_this->m_subs_to_pull;
-+ _this->m_pump.send(Message(2));
-+ }
-+ else
-+ {
-+ _this->m_subs_behind_seek++;
-+ }
- }
-
- void eServiceMP3::gstTextpadHasCAPS(GstPad *pad, GParamSpec * unused, gpointer user_data)
-@@ -1729,6 +1754,11 @@ void eServiceMP3::pullSubtitle()
- {
- GstBuffer *buffer;
- {
-+ if(m_block_sub == TRUE)
-+ {
-+ g_signal_emit_by_name (sink, "pull-buffer", &buffer);
-+ return;
-+ }
- eSingleLocker l(m_subs_to_pull_lock);
- --m_subs_to_pull;
- g_signal_emit_by_name (sink, "pull-buffer", &buffer);
-diff --git a/lib/service/servicemp3.h b/lib/service/servicemp3.h
-index cb5b048..7e3f6a6 100644
---- a/lib/service/servicemp3.h
-+++ b/lib/service/servicemp3.h
-@@ -270,6 +270,8 @@ private:
- std::string m_useragent;
- RESULT trickSeek(gdouble ratio);
- double m_cur_rate;
-+ bool m_block_sub;
-+ int m_subs_behind_seek;
- };
-
- #endif