jackpatch: Avoid race condition for ports registered after start but before open.

This commit is contained in:
Jonathan Moore Liles 2013-04-10 17:23:29 -07:00
parent e69a124e27
commit ffcf1454d5
1 changed files with 22 additions and 5 deletions

View File

@ -44,6 +44,8 @@
#include <pthread.h>
int client_active = 0;
jack_client_t *client;
pthread_mutex_t port_lock;
@ -527,7 +529,9 @@ signal_handler ( int x )
void
die ( void )
{
jack_deactivate( client );
if ( client_active )
jack_deactivate( client );
jack_client_close( client );
client = NULL;
exit( 0 );
@ -592,6 +596,16 @@ osc_save ( const char *path, const char *types, lo_arg **argv, int argc, lo_mess
return 0;
}
void
maybe_activate_jack_client ( void )
{
if ( ! client_active )
{
jack_activate( client );
client_active = 1;
}
}
int
osc_open ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data )
{
@ -611,6 +625,7 @@ osc_open ( const char *path, const char *types, lo_arg **argv, int argc, lo_mess
{
/* wipe_ports(); */
/* check_for_new_ports(); */
maybe_activate_jack_client();
register_prexisting_ports();
}
else
@ -621,6 +636,7 @@ osc_open ( const char *path, const char *types, lo_arg **argv, int argc, lo_mess
}
else
{
maybe_activate_jack_client();
clear_all_patches();
}
@ -720,19 +736,19 @@ main ( int argc, char **argv )
pthread_mutex_init( &port_lock, NULL );
jack_activate( client );
set_traps();
if ( argc > 1 )
{
maybe_activate_jack_client();
if ( ! strcmp( argv[1], "--save" ) )
{
if ( argc > 2 )
{
printf( "Saving current graph to: %s\n", argv[2] );
snapshot( argv[2] );
exit(0);
die();
}
}
else
@ -765,7 +781,8 @@ main ( int argc, char **argv )
{
lo_server_recv_noblock( losrv, 500 );
check_for_new_ports();
if ( client_active )
check_for_new_ports();
if ( die_now )
die();