void mfp_comm_io_finish(void) { pthread_mutex_lock(&comm_io_lock); comm_io_quitreq = 1; pthread_cond_broadcast(&outgoing_cond); pthread_mutex_unlock(&comm_io_lock); mfp_comm_io_wait(); }
/* main() gets called only if this is a standalone JACK client * startup. The MFP process will cause this to be run */ int main(int argc, char ** argv) { char * sockname; char default_sockname[] = MFP_DEFAULT_SOCKET; int max_blocksize = 4096; int num_inputs = 2; int num_outputs = 2; mfp_context * ctxt; if (argc < 2) { printf("mfpdsp: Warning: No socket specified, using default '%s'\n", default_sockname); sockname = default_sockname; } else { sockname = argv[1]; if (argc < 3) { printf("mfpdsp: Warning: No max_blocksize specified, using default '%d'\n", max_blocksize); } else { max_blocksize = strtod(argv[2], NULL); if (argc < 4) { printf("mfpdsp: Warning: No num_inputs specified, using default '%d'\n", num_inputs); } else { num_inputs = strtod(argv[3], NULL); if (argc < 5) { printf("mfpdsp: Warning: No num_outputs specified, using default '%d'\n", num_outputs); } else { num_outputs = strtod(argv[4], NULL); } } } } /* install SIGSEGV handlers */ struct sigaction sa; sa.sa_flags = SA_SIGINFO; sigemptyset(&sa.sa_mask); sa.sa_sigaction = sigsegv_handler; if (sigaction(SIGSEGV, &sa, NULL) == -1) { mfp_log_error("mfpdsp: ERROR: could not install SIGSEGV handler, exiting\n"); return -1; } /* set up global state */ mfp_init_all(sockname); ctxt = mfp_jack_startup("mfpdsp", num_inputs, num_outputs); mfp_context_init(ctxt); mfp_comm_io_wait(); mfp_jack_shutdown(); return 0; }