9616b79026
This lock causes a deadlock when freeing the JACK client while a process callback is pending: deactivate_jack -> locks mutex JACK thread -> calls jack_process_callback jack_process_callback -> blocks on mutex jack_client_close -> joins JACK thread (deadlock as the process callback never returns) Instead, just don't lock the mutex. This is only mutexing on creation/destruction of the JACK client. This is not necessary: the process callback will only run after jack_activate (which is right before the mutex is released in jack_init()), and will stop running by the time jack_client_close returns. We don't actually need to unregister any ports, so just call jack_client_close first thing in deactivate_jack, which will guarantee the process callback has completed before returning. In fact, jack_process_callback isn't allowed to lock any mutexes or allocate any memory at all, so this plug-in is still broken in this way as obs_source_output_audio does that. This can cause audio xruns, as realtime guarantees are violated. This is something that should be fixed in the future, but at least it's not a deadlock.