[pulseaudio-discuss] [PATCH] protocol-native: Don't signal memfd support for 9.0 clients

Ahmed S. Darwish darwish.07 at gmail.com
Fri Nov 18 23:54:10 UTC 2016


Although such 9.0 clients support memfd transport, they have an
iochannel bug that would break memfd audio if they're run in 32
bit mode over a 64-bit kernel. Influence them to use the POSIX
shared memory model instead.

Also bump the protocol version to exclusively mark such v9.0
libraries. Check commit 451d1d676237c81 for further details.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=97769
Signed-off-by: Ahmed S. Darwish <darwish.07 at gmail.com>
---
 PROTOCOL                        | 12 ++++++++++++
 configure.ac                    |  2 +-
 src/pulsecore/protocol-native.c | 10 ++++++++--
 3 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/PROTOCOL b/PROTOCOL
index 5191397..546998b 100644
--- a/PROTOCOL
+++ b/PROTOCOL
@@ -408,6 +408,18 @@ By doing so, there's need to reference the pool's memfd file descriptor any
 further -- just its ID. Thus both endpoints can then quickly and safely
 close their memfd file descriptors.
 
+## v32, implemented by >= 10.0
+
+Enable memfd transport by default.
+
+This protocol bump was only created to mark 9.0 clients. Although they
+support memfd transport, such older clients has an iochannel bug that would
+break memfd audio if they're run in 32-bit mode over a 64-bit kernel. Thus
+influence these buggy libraries to use POSIX shared memory, by signalling
+memfd support only to 10.0+ clients.
+
+Check commit 451d1d676237c81 for further details.
+
 #### If you just changed the protocol, read this
 ## module-tunnel depends on the sink/source/sink-input/source-input protocol
 ## internals, so if you changed these, you might have broken module-tunnel.
diff --git a/configure.ac b/configure.ac
index 1bcdda6..35f0011 100644
--- a/configure.ac
+++ b/configure.ac
@@ -40,7 +40,7 @@ AC_SUBST(PA_MINOR, pa_minor)
 AC_SUBST(PA_MAJORMINOR, pa_major.pa_minor)
 
 AC_SUBST(PA_API_VERSION, 12)
-AC_SUBST(PA_PROTOCOL_VERSION, 31)
+AC_SUBST(PA_PROTOCOL_VERSION, 32)
 
 # The stable ABI for client applications, for the version info x:y:z
 # always will hold y=z
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index 0f86bd2..13f4f62 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -2658,12 +2658,18 @@ static void command_auth(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_ta
     pa_log_debug("Negotiated SHM: %s", pa_yes_no(do_shm));
     pa_pstream_enable_shm(c->pstream, do_shm);
 
+    /* Do not declare memfd support for 9.0 client libraries (protocol v31).
+     *
+     * Although they support memfd transport, such 9.0 clients has an iochannel
+     * bug that would break memfd audio if they're run in 32-bit mode over a
+     * 64-bit kernel. Thus influence them to use the POSIX shared memory model
+     * instead. Check commit 451d1d676237c81 for further details. */
     do_memfd =
-        do_shm && pa_mempool_is_memfd_backed(c->protocol->core->mempool);
+        c->version >= 32 && do_shm && pa_mempool_is_memfd_backed(c->protocol->core->mempool);
 
     shm_type = PA_MEM_TYPE_PRIVATE;
     if (do_shm) {
-        if (c->version >= 31 && memfd_on_remote && do_memfd) {
+        if (do_memfd && memfd_on_remote) {
             pa_pstream_enable_memfd(c->pstream);
             shm_type = PA_MEM_TYPE_SHARED_MEMFD;
         } else

-- 
Darwish
http://darwish.chasingpointers.com


More information about the pulseaudio-discuss mailing list