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 451d1d6762 for further details.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=97769
Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
This commit is contained in:
Ahmed S. Darwish 2016-11-19 01:54:10 +02:00 committed by Tanu Kaskinen
parent 451d1d6762
commit f665b2b10d
3 changed files with 21 additions and 3 deletions

View file

@ -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