diff options
Diffstat (limited to 'src/demuxers/demux_mpeg_block.c')
-rw-r--r-- | src/demuxers/demux_mpeg_block.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/demuxers/demux_mpeg_block.c b/src/demuxers/demux_mpeg_block.c index e1de03b33..b188dbde9 100644 --- a/src/demuxers/demux_mpeg_block.c +++ b/src/demuxers/demux_mpeg_block.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: demux_mpeg_block.c,v 1.100 2002/05/14 22:22:43 tmattern Exp $ + * $Id: demux_mpeg_block.c,v 1.101 2002/05/21 00:17:55 tmattern Exp $ * * demultiplexer for mpeg 1/2 program streams * @@ -933,7 +933,7 @@ static int demux_mpeg_detect_blocksize(demux_mpeg_block_t *this, } -static void demux_mpeg_block_start (demux_plugin_t *this_gen, +static int demux_mpeg_block_start (demux_plugin_t *this_gen, fifo_buffer_t *video_fifo, fifo_buffer_t *audio_fifo, off_t start_pos, int start_time) { @@ -941,6 +941,7 @@ static void demux_mpeg_block_start (demux_plugin_t *this_gen, demux_mpeg_block_t *this = (demux_mpeg_block_t *) this_gen; buf_element_t *buf; int err; + int status; pthread_mutex_lock( &this->mutex ); @@ -1052,14 +1053,20 @@ static void demux_mpeg_block_start (demux_plugin_t *this_gen, _("demux_mpeg_block: unknown block size. try using demux_mpeg.\n")); this->status = DEMUX_FINISHED ; } + + /* this->status is saved because we can be interrupted between + * pthread_mutex_unlock and return + */ + status = this->status; pthread_mutex_unlock( &this->mutex ); + return status; } -static void demux_mpeg_block_seek (demux_plugin_t *this_gen, +static int demux_mpeg_block_seek (demux_plugin_t *this_gen, off_t start_pos, int start_time) { demux_mpeg_block_t *this = (demux_mpeg_block_t *) this_gen; - demux_mpeg_block_start (this_gen, this->video_fifo, this->audio_fifo, + return demux_mpeg_block_start (this_gen, this->video_fifo, this->audio_fifo, start_pos, start_time); } |