[pulseaudio-commits] configure.ac PROTOCOL src/pulsecore

Tanu Kaskinen tanuk at kemper.freedesktop.org
Sat Nov 19 13:21:31 UTC 2016


 PROTOCOL                        |   12 ++++++++++++
 configure.ac                    |    2 +-
 src/pulsecore/protocol-native.c |   10 ++++++++--
 3 files changed, 21 insertions(+), 3 deletions(-)

New commits:
commit f665b2b10d9cc5412223fd107ea09c25f28eb0a0
Author: Ahmed S. Darwish <darwish.07 at gmail.com>
Date:   Sat Nov 19 01:54:10 2016 +0200

    protocol-native: Don't signal memfd support for 9.0 clients
    
    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>

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



More information about the pulseaudio-commits mailing list