[pulseaudio-discuss] [PATCH 1/2] protocol-native: Disable srbchannel for setups without SCM_CREDENTIALS

Ahmed S. Darwish darwish.07 at gmail.com
Fri Apr 22 19:48:26 UTC 2016


srbchannel needs fd passing. Otherwise we get the following error
for systems without SCM_CREDENTIALS support:

    Code should not be reached at pulsecore/pstream-util.c:95,
    function pa_pstream_send_tagstruct_with_fds(). Aborting.

[[ The root cause is that we define HAVE_CREDS only if
SCM_CREDENTIALS is defined, but SCM_CREDENTIALS is a Linux-specific
symbol. Thus HAVE_CREDS is always disabled on Solaris.

And since pulse couples the non-portable creds passing support
with the portable fd passing one, through _35_ places where
HAVE_CREDS is used, a real fix needs a PA redesign -- assuming that
latency on Solaris is something people care about. ]]

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=94339
Signed-off-by: Ahmed S. Darwish <darwish.07 at gmail.com>
---

Notes:
    This was tested by force disabling HAVE_CREDS on a Linux
    system, which reproduces the Solaris issue quite nicely.
    
    More on SCM_CREDENTIALS and portability, by Sun engineers,
    is at comp.unix.programmer:
    https://groups.google.com/forum/#!topic/comp.unix.programmer/nwES3UvH-E0

 src/pulsecore/protocol-native.c | 5 +++++
 src/pulsecore/pstream-util.c    | 4 ++--
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index ffa5c4d..5697588 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -2604,6 +2604,11 @@ static void setup_srbchannel(pa_native_connection *c) {
     pa_tagstruct *t;
     int fdlist[2];
 
+#ifndef HAVE_CREDS
+    pa_log_debug("Disabling srbchannel, reason: No fd passing support");
+    return;
+#endif
+
     if (!c->options->srbchannel) {
         pa_log_debug("Disabling srbchannel, reason: Must be enabled by module parameter");
         return;
diff --git a/src/pulsecore/pstream-util.c b/src/pulsecore/pstream-util.c
index 505f0cf..d0d6c66 100644
--- a/src/pulsecore/pstream-util.c
+++ b/src/pulsecore/pstream-util.c
@@ -90,8 +90,8 @@ void pa_pstream_send_tagstruct_with_creds(pa_pstream *p, pa_tagstruct *t, const
     pa_pstream_send_tagstruct_with_ancil_data(p, t, NULL);
 }
 
-void pa_pstream_send_tagstruct_with_fds(pa_pstream *p, pa_tagstruct *t, int nfd, const int *fds,
-                                        bool close_fds) {
+void PA_GCC_NORETURN pa_pstream_send_tagstruct_with_fds(pa_pstream *p, pa_tagstruct *t, int nfd, const int *fds,
+                                                        bool close_fds) {
     pa_assert_not_reached();
 }

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


More information about the pulseaudio-discuss mailing list