summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMiguel Freitas <miguelfreitas@users.sourceforge.net>2002-10-30 17:51:13 +0000
committerMiguel Freitas <miguelfreitas@users.sourceforge.net>2002-10-30 17:51:13 +0000
commit7e1601a85ba1f6640c717a02a64a136da23e7165 (patch)
treeed576d246baba59232957bbb0e71fca8186b40eb /src
parentc0a6fe55488467a5ceaeb2073b99e9503b3031db (diff)
downloadxine-lib-7e1601a85ba1f6640c717a02a64a136da23e7165.tar.gz
xine-lib-7e1601a85ba1f6640c717a02a64a136da23e7165.tar.bz2
- add mutex on seeking and avoid overuse of sched_yield
CVS patchset: 3102 CVS date: 2002/10/30 17:51:13
Diffstat (limited to 'src')
-rw-r--r--src/xine-engine/demux.c5
-rw-r--r--src/xine-engine/xine.c6
-rw-r--r--src/xine-engine/xine_internal.h3
3 files changed, 11 insertions, 3 deletions
diff --git a/src/xine-engine/demux.c b/src/xine-engine/demux.c
index 56917e71b..222a293e4 100644
--- a/src/xine-engine/demux.c
+++ b/src/xine-engine/demux.c
@@ -159,7 +159,8 @@ static void *demux_loop (void *stream_gen) {
/* someone may want to interrupt us */
pthread_mutex_unlock( &stream->demux_lock );
- sched_yield();
+ if( stream->demux_action_pending )
+ sched_yield();
pthread_mutex_lock( &stream->demux_lock );
}
@@ -231,8 +232,10 @@ int xine_demux_stop_thread (xine_stream_t *stream) {
printf ("demux: stop thread called\n");
#endif
+ stream->demux_action_pending = 1;
pthread_mutex_lock( &stream->demux_lock );
stream->demux_thread_running = 0;
+ stream->demux_action_pending = 0;
pthread_mutex_unlock( &stream->demux_lock );
#ifdef LOG
diff --git a/src/xine-engine/xine.c b/src/xine-engine/xine.c
index 22cd81a92..a7f6142a8 100644
--- a/src/xine-engine/xine.c
+++ b/src/xine-engine/xine.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: xine.c,v 1.184 2002/10/29 21:31:02 guenter Exp $
+ * $Id: xine.c,v 1.185 2002/10/30 17:51:13 miguelfreitas Exp $
*
* top-level xine functions
*
@@ -534,8 +534,12 @@ static int xine_play_internal (xine_stream_t *stream, int start_pos, int start_t
return 0;
}
+ stream->demux_action_pending = 1;
+ pthread_mutex_lock( &stream->demux_lock );
demux_status = stream->demux_plugin->seek (stream->demux_plugin,
pos, start_time);
+ stream->demux_action_pending = 0;
+ pthread_mutex_unlock( &stream->demux_lock );
if (demux_status != DEMUX_OK) {
xine_log (stream->xine, XINE_LOG_MSG,
diff --git a/src/xine-engine/xine_internal.h b/src/xine-engine/xine_internal.h
index 1eb4b5fae..0beb014ae 100644
--- a/src/xine-engine/xine_internal.h
+++ b/src/xine-engine/xine_internal.h
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: xine_internal.h,v 1.109 2002/10/29 16:02:54 mroi Exp $
+ * $Id: xine_internal.h,v 1.110 2002/10/30 17:51:13 miguelfreitas Exp $
*
*/
@@ -211,6 +211,7 @@ struct xine_stream_s {
pthread_t demux_thread;
int demux_thread_running;
pthread_mutex_t demux_lock;
+ int demux_action_pending;
int err;
};