]> git.sesse.net Git - mlt/commitdiff
Fix segfault on concurrent calls to jack_activate().
authorDan Dennedy <dan@dennedy.org>
Wed, 17 Aug 2011 04:34:37 +0000 (21:34 -0700)
committerDan Dennedy <dan@dennedy.org>
Wed, 17 Aug 2011 04:38:58 +0000 (21:38 -0700)
src/modules/jackrack/consumer_jack.c
src/modules/jackrack/filter_jackrack.c
src/modules/jackrack/process.c

index b47a99560854fe869b8e815358cce2b6399f4534..ce18604e88ac703164e9b54e56d12a6cf2e83613 100644 (file)
@@ -29,6 +29,8 @@
 
 #define BUFFER_LEN (204800 * 6)
 
+pthread_mutex_t g_activate_mutex = PTHREAD_MUTEX_INITIALIZER;
+
 /** This classes definition.
 */
 
@@ -258,7 +260,9 @@ static void initialise_jack_ports( consumer_jack self )
        self->ports = mlt_pool_alloc( sizeof(jack_port_t *) * channels );
 
        // Start Jack processing - required before registering ports
+       pthread_mutex_lock( &g_activate_mutex );
        jack_activate( self->jack );
+       pthread_mutex_unlock( &g_activate_mutex );
        self->playing = 1;
 
        // Register Jack ports
index b0329e6b90bf6be5d56cd409a7b56ec103c4a196..4ec111647afe80c7ae19fec07e16b2f2a2e90922 100644 (file)
@@ -32,6 +32,8 @@
 
 #include "jack_rack.h"
 
+extern pthread_mutex_t g_activate_mutex;
+
 #define BUFFER_LEN 204800 * 6
 
 static void jack_started_transmitter( mlt_listener listener, mlt_properties owner, mlt_service service, void **args )
@@ -173,7 +175,9 @@ static void initialise_jack_ports( mlt_properties properties )
                sizeof( float *) * channels, mlt_pool_release, NULL );
 
        // Start Jack processing - required before registering ports
+       pthread_mutex_lock( &g_activate_mutex );
        jack_activate( jack_client );
+       pthread_mutex_unlock( &g_activate_mutex  );
        
        // Register Jack ports
        for ( i = 0; i < channels; i++ )
index 08eecf6d7e4cffb4daae78d32fe189a10c346761..88c00e8f55915a64150118848f0e5b117e4c0c88 100644 (file)
@@ -43,6 +43,8 @@
 #define _(x) x
 #endif
 
+extern pthread_mutex_t g_activate_mutex;
+
 #define USEC_PER_SEC         1000000
 #define MSEC_PER_SEC         1000
 #define TIME_RUN_SKIP_COUNT  5
@@ -571,7 +573,9 @@ process_info_new (const char * client_name, unsigned long rack_channels,
   buffer_size = jack_get_sample_rate (procinfo->jack_client);
   
   jack_set_process_callback (procinfo->jack_client, process_jack, procinfo);
+  pthread_mutex_lock( &g_activate_mutex );
   jack_on_shutdown (procinfo->jack_client, jack_shutdown_cb, procinfo);
+  pthread_mutex_unlock( &g_activate_mutex );
   
   jack_activate (procinfo->jack_client);