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@gmail.com>
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.
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
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