Use jack_on_shutdown callback to terminate gracefully when Jack is shutting down.
This commit is contained in:
parent
c1b7398513
commit
b4e85ef288
12
jackdriver.c
12
jackdriver.c
|
@ -369,6 +369,15 @@ int pop_midi(void* seqq, uint8_t msg[], uint8_t *port_no)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int jack_shutdown;
|
||||||
|
|
||||||
|
void
|
||||||
|
shutdown_callback()
|
||||||
|
{
|
||||||
|
// we can't do anything fancy here, just ping the main thread
|
||||||
|
jack_shutdown = 1;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//this is run in the main thread
|
//this is run in the main thread
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
|
@ -388,6 +397,9 @@ init_jack(JACK_SEQ* seq, uint8_t verbose)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(verbose)printf("assigning shutdown callback...\n");
|
||||||
|
jack_on_shutdown(seq->jack_client, shutdown_callback, (void*)seq);
|
||||||
|
|
||||||
if(verbose)printf("assigning process callback...\n");
|
if(verbose)printf("assigning process callback...\n");
|
||||||
err = jack_set_process_callback(seq->jack_client, process_callback, (void*)seq);
|
err = jack_set_process_callback(seq->jack_client, process_callback, (void*)seq);
|
||||||
if (err)
|
if (err)
|
||||||
|
|
|
@ -15,6 +15,8 @@ typedef struct _jseq
|
||||||
uint8_t n_out;
|
uint8_t n_out;
|
||||||
} JACK_SEQ;
|
} JACK_SEQ;
|
||||||
|
|
||||||
|
extern int jack_shutdown;
|
||||||
|
|
||||||
int init_jack(JACK_SEQ* seq, uint8_t verbose);
|
int init_jack(JACK_SEQ* seq, uint8_t verbose);
|
||||||
void close_jack(JACK_SEQ* seq);
|
void close_jack(JACK_SEQ* seq);
|
||||||
void queue_midi(void* seqq, uint8_t msg[], uint8_t port_no);
|
void queue_midi(void* seqq, uint8_t msg[], uint8_t port_no);
|
||||||
|
|
|
@ -900,6 +900,11 @@ main(int argc, char **argv)
|
||||||
signal(SIGINT, quitter);
|
signal(SIGINT, quitter);
|
||||||
while (!quit) {
|
while (!quit) {
|
||||||
uint8_t portno;
|
uint8_t portno;
|
||||||
|
if (jack_shutdown) {
|
||||||
|
fprintf(stderr, "%s: jack shutting down, exiting\n", argv[0]);
|
||||||
|
close_jack(&seq);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
while (pop_midi(&seq, msg, &portno)) {
|
while (pop_midi(&seq, msg, &portno)) {
|
||||||
handle_event(msg, portno);
|
handle_event(msg, portno);
|
||||||
count = 0;
|
count = 0;
|
||||||
|
|
Loading…
Reference in New Issue