diff options
author | Stephane Letz <letz@grame.fr> | 2011-03-24 12:41:20 +0100 |
---|---|---|
committer | Stephane Letz <letz@grame.fr> | 2011-03-24 12:41:20 +0100 |
commit | 5360ec7522b28d8e89ef1f7431f85c63b6e5ff68 (patch) | |
tree | 7964920ee5692ba25d8a4aa58e0ce5459e1999eb /example-clients/midi_latency_test.c | |
parent | 916203bcca5359cfbec782ba61dea562179d151d (diff) | |
download | jack2-5360ec7522b28d8e89ef1f7431f85c63b6e5ff68.tar.gz |
Fix midi_latency_test.c for OSX.
Diffstat (limited to 'example-clients/midi_latency_test.c')
-rw-r--r-- | example-clients/midi_latency_test.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/example-clients/midi_latency_test.c b/example-clients/midi_latency_test.c index 1bece0d3..d9e6fb08 100644 --- a/example-clients/midi_latency_test.c +++ b/example-clients/midi_latency_test.c @@ -95,7 +95,11 @@ char *program_name; jack_port_t *remote_in_port; jack_port_t *remote_out_port; size_t samples; +#ifdef __APPLE__ +sem_t* semaphore; +#else sem_t semaphore; +#endif pthread_mutex_t start_mutex; int timeout; jack_nframes_t total_latency; @@ -212,7 +216,11 @@ handle_process(jack_nframes_t frames, void *arg) messages_received++; if (messages_received == samples) { process_state = 2; + #ifdef __APPLE__ + sem_post(semaphore); + #else sem_post(&semaphore); + #endif break; } send_message: @@ -302,7 +310,11 @@ set_process_error(const char *source, const char *message) error_source = source; error_message = message; process_state = -1; + #ifdef __APPLE__ + sem_post(semaphore); +#else sem_post(&semaphore); +#endif } int @@ -460,11 +472,22 @@ main(int argc, char **argv) jack_on_shutdown(client, handle_shutdown, NULL); jack_set_info_function(handle_info); process_state = 0; +#ifdef __APPLE__ + // sem_init is not implemented on OSX + char name[128]; + sprintf(name, "midi_sem_%p", client); + if ((semaphore = sem_open(name, O_CREAT, 0777, 0)) == (sem_t*)SEM_FAILED) { + error_message = strerror(errno); + error_source = "sem_open"; + goto unregister_out_port; + } +#else if (sem_init(&semaphore, 0, 0)) { error_message = strerror(errno); error_source = "sem_init"; goto unregister_out_port; } +#endif code = pthread_mutex_init(&start_mutex, NULL); if (code) { error_message = strerror(errno); @@ -500,11 +523,15 @@ main(int argc, char **argv) error_source = "pthread_mutex_unlock"; goto deactivate_client; } +#ifdef __APPLE__ + while (sem_wait(semaphore) != 0) {} +#else if (sem_wait(&semaphore)) { error_message = strerror(errno); error_source = "sem_wait"; goto deactivate_client; } +#endif if (process_state == 2) { double average_latency = ((double) total_latency) / samples; double average_latency_time = total_latency_time / samples; @@ -572,7 +599,11 @@ main(int argc, char **argv) destroy_mutex: pthread_mutex_destroy(&start_mutex); destroy_semaphore: +#ifdef __APPLE__ + sem_destroy(semaphore); +#else sem_destroy(&semaphore); +#endif unregister_out_port: jack_port_unregister(client, out_port); unregister_in_port: @@ -592,5 +623,8 @@ main(int argc, char **argv) output_error(error_source, error_message); exit(EXIT_FAILURE); } +#ifdef __APPLE__ + sem_unlink(name); +#endif return EXIT_SUCCESS; } |