From d06f78273b93b48ad3c5e265c22fc300ccd774f5 Mon Sep 17 00:00:00 2001 From: zhaochengyi Date: Sat, 18 Jul 2020 16:47:40 +0800 Subject: [PATCH] pulsecore: Add exception judgment to fix the crash when playing music When playing music for a period of time, the Shared Memory is frequently accessed, and occasionally read/write errors occur, which causes the program to crash [Current thread is 1 (Thread 0xffff86823010 (LWP 2841))] (gdb) bt 0 0x0000ffff8702a714 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 1 0x0000ffff870188e8 in __GI_abort () at abort.c:79 2 0x0000ffff873b5728 in do_read (p=p@entry=0x3673a170, re=re@entry=0x3673a338) at pulsecore/pstream.c:856 3 0x0000ffff873b7fd8 in do_pstream_read_write (p=0x3673a170) at pulsecore/pstream.c:248 4 0x0000ffff873b8368 in srb_callback (srb=, userdata=0x3673a170) at pulsecore/pstream.c:287 5 0x0000ffff873b8bec in srbchannel_rwloop (sr=0x36766ae0) at pulsecore/srbchannel.c:190 6 0x0000ffff87339c70 in dispatch_pollfds (m=0x36670db0) at pulse/mainloop.c:655 7 0x0000ffff87339c70 in pa_mainloop_dispatch (m=m@entry=0x36670db0) at pulse/mainloop.c:898 8 0x0000ffff8733a01c in pa_mainloop_iterate (m=0x36670db0, block=, retval=0xffffd9683030) at pulse/mainloop.c:929 9 0x0000ffff8733a0d8 in pa_mainloop_run (m=m@entry=0x36670db0, retval=retval@entry=0xffffd9683030) at pulse/mainloop.c:945 10 0x0000000000406894 in main (argc=, argv=) at daemon/main.c:1144 [jcsing.lee: backport mainline commit b5a6365f1] Signed-off-by: zhaochengyi [Version] 13.0-24 [Issue Type] Bug fix Change-Id: I7dae834ca8dc0038aa583d02f688fdfb22edca0a --- packaging/pulseaudio.spec | 2 +- src/pulsecore/pstream.c | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packaging/pulseaudio.spec b/packaging/pulseaudio.spec index 6579991..ce8f806 100644 --- a/packaging/pulseaudio.spec +++ b/packaging/pulseaudio.spec @@ -3,7 +3,7 @@ Name: pulseaudio Summary: Improved Linux sound server Version: 13.0 -Release: 23 +Release: 24 Group: Multimedia/Audio License: LGPL-2.1 URL: http://pulseaudio.org diff --git a/src/pulsecore/pstream.c b/src/pulsecore/pstream.c index 2b3bc9c..2b0b5b0 100644 --- a/src/pulsecore/pstream.c +++ b/src/pulsecore/pstream.c @@ -244,8 +244,16 @@ static void do_pstream_read_write(pa_pstream *p) { p->mainloop->defer_enable(p->defer_event, 0); if (!p->dead && p->srb) { - do_write(p); - while (!p->dead && do_read(p, &p->readsrb) == 0); + int r = 0; + + if(do_write(p) < 0) + goto fail; + + while (!p->dead && r == 0) { + r = do_read(p, &p->readsrb); + if (r < 0) + goto fail; + } } if (!p->dead && pa_iochannel_is_readable(p->io)) { -- 2.7.4