On 2015-10-16 10:35, Takashi Iwai wrote:
On Fri, 16 Oct 2015 09:16:04 +0200,
David Henningsson wrote:

(Adding pulseaudio-discuss to CC)

On 2015-10-15 16:26, Takashi Iwai wrote:
Hi David,

we got bug reports with PA 7.0 where the recent KDE crashes.
It seems that srbchannel=no works around it, so there is still
something fishy there.

The bug report is found at
    http://bugzilla.opensuse.org/show_bug.cgi?id=950487

Hi Takashi and thanks for reporting.

I've tried running PA 7.0's pactl under valgrind, and it reports no
errors here. Still, looking at the one of the backtraces the value of f
is something interesting:

#6  flush (f=f@entry=0x4545454545454545) at pulsecore/fdsem.c:143
#7  0x00007fe30f378fc2 in pa_fdsem_before_poll (f=0x4545454545454545) at
pulsecore/fdsem.c:295
#8  0x00007fe30f38f697 in srbchannel_rwloop (sr=0x25bdd40) at
pulsecore/srbchannel.c:203

Does 0x4545454545454545 mean anything specific on OpenSUSE? (Like, a
magic clear value or something?)

I don't think it's openSUSE specific.  It's likely the guard put by
either gcc or glibc.
FWIW, we pass the default optimization flags like:
   CFLAGS=-fmessage-length=0 -grecord-gcc-switches -O2 -Wall \
     -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables \
     -fasynchronous-unwind-tables -g -fPIE

The problem was reported from both gcc-4.8 and gcc-5.x systems, so the
gcc version is likely irrelevant.

Also, are there any distro patches to OpenSUSE and if so, where can I
find them?

No, there is no patches apparently relevant with this.  Actually there are
three patches, one is to check an additional environment check in
start-pulseaudio-x11, another is to suppress an error log at
sockaddr_prepare(), and the last is a fix in memset() size in
echo-cancel/adrian-aec.c.  But all these should be safe.

All sources, patches, build log and binaries are found in OBS, e.g. at
   https://build.opensuse.org/package/show/multimedia:libs/pulseaudio

Ok, thanks.

I've been trying to analyze the backtrace.

My guess is that the srbchannel is being destroyed somehow, but I don't see how. Any chance we can get more info from this, e g, build pulseaudio's client library with -DDEBUG_SRBCHANNEL=1 and then get a log like this:

PULSE_LOG=99 pactl info

...which includes the crash?

Also, if the srbchannel gets destroyed and replaced by another srbchannel (eh?), it's possible that the below would help:

diff --git a/src/pulsecore/pstream.c b/src/pulsecore/pstream.c
index 8c14fbb..06063bb 100644
--- a/src/pulsecore/pstream.c
+++ b/src/pulsecore/pstream.c
@@ -223,7 +223,7 @@ static bool srb_callback(pa_srbchannel *srb, void *userdata) {
     pa_assert(p->srb == srb);

     do_pstream_read_write(p);
-    return p->srb != NULL;
+    return p->srb == srb;
 }


...but that's an even wilder guess, at this point.


--
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic
_______________________________________________
pulseaudio-discuss mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss

Reply via email to