summaryrefslogtreecommitdiff
path: root/example-clients/midi_latency_test.c
diff options
context:
space:
mode:
authorStephane Letz <letz@grame.fr>2011-03-24 12:41:20 +0100
committerStephane Letz <letz@grame.fr>2011-03-24 12:41:20 +0100
commit5360ec7522b28d8e89ef1f7431f85c63b6e5ff68 (patch)
tree7964920ee5692ba25d8a4aa58e0ce5459e1999eb /example-clients/midi_latency_test.c
parent916203bcca5359cfbec782ba61dea562179d151d (diff)
downloadjack2-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.c34
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;
}