From 3ecea410d79d398126b54579b422e2f16baede5f Mon Sep 17 00:00:00 2001 From: "Igor V. Kovalenko" Date: Tue, 29 Dec 2020 00:03:41 +0300 Subject: [PATCH] context: add property to forcefully disable shared memory channels If application wants last bits of virtual memory, allow it to forcefully disable shared memory communication channels via PA_PROP_CONTEXT_FORCE_DISABLE_SHM=yes Part-of: --- src/pulse/context.c | 11 +++++++++++ src/pulse/proplist.h | 3 +++ 2 files changed, 14 insertions(+) diff --git a/src/pulse/context.c b/src/pulse/context.c index 1d1bb9ee8..05b6633aa 100644 --- a/src/pulse/context.c +++ b/src/pulse/context.c @@ -128,6 +128,7 @@ static void reset_callbacks(pa_context *c) { pa_context *pa_context_new_with_proplist(pa_mainloop_api *mainloop, const char *name, const pa_proplist *p) { pa_context *c; pa_mem_type_t type; + const char *force_disable_shm_str; pa_assert(mainloop); @@ -173,6 +174,16 @@ pa_context *pa_context_new_with_proplist(pa_mainloop_api *mainloop, const char * c->conf = pa_client_conf_new(); pa_client_conf_load(c->conf, true, true); + force_disable_shm_str = pa_proplist_gets(c->proplist, PA_PROP_CONTEXT_FORCE_DISABLE_SHM); + if (force_disable_shm_str) { + int b = pa_parse_boolean(force_disable_shm_str); + if (b < 0) { + pa_log_warn("Ignored invalid value for '%s' property: %s", PA_PROP_CONTEXT_FORCE_DISABLE_SHM, force_disable_shm_str); + } else if (b) { + c->conf->disable_shm = true; + } + } + c->srb_template.readfd = -1; c->srb_template.writefd = -1; diff --git a/src/pulse/proplist.h b/src/pulse/proplist.h index e50518b37..5da01664b 100644 --- a/src/pulse/proplist.h +++ b/src/pulse/proplist.h @@ -267,6 +267,9 @@ PA_C_DECL_BEGIN /** For PCM formats: the channel map of the stream as returned by pa_channel_map_snprint() \since 1.0 */ #define PA_PROP_FORMAT_CHANNEL_MAP "format.channel_map" +/** For context: whether to forcefully disable data transfer via POSIX or memfd shared memory. This property overrides any other client configuration which would otherwise enable SHM communication channels. \since 15.0 */ +#define PA_PROP_CONTEXT_FORCE_DISABLE_SHM "context.force.disable.shm" + /** A property list object. Basically a dictionary with ASCII strings * as keys and arbitrary data as values. \since 0.9.11 */ typedef struct pa_proplist pa_proplist;