diff --git a/pipewire-jack/src/pipewire-jack.c b/pipewire-jack/src/pipewire-jack.c index 690ecccc9..d1512e5be 100644 --- a/pipewire-jack/src/pipewire-jack.c +++ b/pipewire-jack/src/pipewire-jack.c @@ -387,6 +387,7 @@ struct client { unsigned int short_name:1; unsigned int filter_name:1; unsigned int freewheeling:1; + unsigned int locked_process:1; int self_connect_mode; int rt_max; @@ -739,9 +740,11 @@ void jack_get_version(int *major_ptr, int *minor_ptr, int *micro_ptr, int *proto ({ \ if (c->callback && c->active) { \ pw_thread_loop_unlock(c->context.loop); \ - pthread_mutex_lock(&c->rt_lock); \ + if (c->locked_process) \ + pthread_mutex_lock(&c->rt_lock); \ c->callback(__VA_ARGS__); \ - pthread_mutex_unlock(&c->rt_lock); \ + if (c->locked_process) \ + pthread_mutex_unlock(&c->rt_lock); \ pw_thread_loop_lock(c->context.loop); \ } \ }) @@ -2972,6 +2975,9 @@ jack_client_t * jack_client_open (const char *client_name, if ((str = pw_properties_get(client->props, "jack.filter-name")) != NULL) client->filter_name = pw_properties_parse_bool(str); + str = pw_properties_get(client->props, "jack.locked-process"); + client->locked_process = str ? pw_properties_parse_bool(str) : true; + client->self_connect_mode = SELF_CONNECT_ALLOW; if ((str = pw_properties_get(client->props, "jack.self-connect-mode")) != NULL) { if (spa_streq(str, "fail-external")) diff --git a/src/daemon/jack.conf.in b/src/daemon/jack.conf.in index 827fc31ff..6b4313d00 100644 --- a/src/daemon/jack.conf.in +++ b/src/daemon/jack.conf.in @@ -59,6 +59,7 @@ context.modules = [ # global properties for all jack clients jack.properties = { #node.latency = 1024/48000 + #node.lock-quantum = false #jack.merge-monitor = false #jack.short-name = false #jack.filter-name = false @@ -69,6 +70,7 @@ jack.properties = { # fail-all: Fail all self connect requests # ignore-all: Ignore all self connect requests #jack.self-connect-mode = allow + #jack.locked-process = true } # client specific properties