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