diff options
author | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2002-10-30 17:51:13 +0000 |
---|---|---|
committer | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2002-10-30 17:51:13 +0000 |
commit | 7e1601a85ba1f6640c717a02a64a136da23e7165 (patch) | |
tree | ed576d246baba59232957bbb0e71fca8186b40eb /src | |
parent | c0a6fe55488467a5ceaeb2073b99e9503b3031db (diff) | |
download | xine-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.c | 5 | ||||
-rw-r--r-- | src/xine-engine/xine.c | 6 | ||||
-rw-r--r-- | src/xine-engine/xine_internal.h | 3 |
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; }; |