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; } diff --git a/macosx/Jackdmp.xcodeproj/project.pbxproj b/macosx/Jackdmp.xcodeproj/project.pbxproj index efe5e9eb..edfbae28 100644 --- a/macosx/Jackdmp.xcodeproj/project.pbxproj +++ b/macosx/Jackdmp.xcodeproj/project.pbxproj @@ -871,7 +871,7 @@ isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; - remoteGlobalIDString = 4B2021DC133A9BA40019E213 /* jack_midi_latency 64 bits */; + remoteGlobalIDString = 4B2021DC133A9BA40019E213; remoteInfo = "jack_midi_latency 64 bits"; }; 4B224B330E65BA330066BE5B /* PBXContainerItemProxy */ = {