]> git.sesse.net Git - mlt/commitdiff
sdl/consumer_sdl_audio.c: use mutex when changing refresh_count
authorMikko Rapeli <mikko.rapeli@iki.fi>
Wed, 1 Aug 2012 13:42:10 +0000 (15:42 +0200)
committerMikko Rapeli <mikko.rapeli@iki.fi>
Mon, 6 Aug 2012 16:37:28 +0000 (18:37 +0200)
Fixes Coverity CID 709359: Data race condition (MISSING_LOCK)

Locking "self->refresh_mutex".
145                pthread_mutex_lock( &self->refresh_mutex );
consumer_sdl_s.refresh_count is being accessed with lock "self->refresh_mutex" held.
146                self->refresh_count = self->refresh_count <= 0 ? 1 : self->refresh_count + 1;
147                pthread_cond_broadcast( &self->refresh_cond );
148                pthread_mutex_unlock( &self->refresh_mutex );
...
Accessing variable "self->refresh_count" (consumer_sdl_s.refresh_count) requires the consumer_sdl_s.refresh_mutex lock.
478        self->refresh_count = 0;
...
Locking "self->refresh_mutex".
535                                pthread_mutex_lock( &self->refresh_mutex );
536                                if ( refresh == 0 && self->refresh_count <= 0 )
537                                {
538                                        consumer_play_video( self, frame );
539                                        pthread_cond_wait( &self->refresh_cond, &self->refresh_mutex );
540                                }
541                                mlt_frame_close( frame );
consumer_sdl_s.refresh_count is being accessed with lock "self->refresh_mutex" held.
542                                self->refresh_count --;
543                                pthread_mutex_unlock( &self->refresh_mutex );

src/modules/sdl/consumer_sdl_audio.c

index 8db5fe2c66c521481306ab6133740fb3af4aa6f0..065811d8b8354e5f4b3a6a239193b7716f466d25 100644 (file)
@@ -475,7 +475,10 @@ static void *consumer_thread( void *arg )
        int64_t playtime = 0;
        struct timespec tm = { 0, 100000 };
 //     int last_position = -1;
+
+       pthread_mutex_lock( &self->refresh_mutex );
        self->refresh_count = 0;
+       pthread_mutex_unlock( &self->refresh_mutex );
 
        // Loop until told not to
        while( self->running )