- Backport upstream fix patches, including the deadlock fix for aplay/arecord (boo#1031525): 0001-ucm-Add-ATTRIBUTE_UNUSED-for-unused-parameters-of-ex.patch 0002-ucm-parser-needs-limits.h.patch 0003-pcm-direct-allow-users-to-configure-different-period.patch 0004-pcm-dshare-enable-silence.patch 0005-pcm-rate-fix-the-hw_ptr-update-until-the-boundary-av.patch 0006-plugin-dynamically-update-avail_min-on-slave.patch 0007-rate-dynamic-update-avail_min-on-slave.patch 0008-topology-fix-unused-const-variable-warning.patch 0009-seq-improve-documentation-about-new-get-pid-card-fun.patch 0010-pcm-direct-returning-semop-error-code-for-semaphore-.patch 0011-pcm-direct-Fix-for-sync-issue-on-xrun-recover.patch 0012-pcm-direct-check-state-before-enter-poll-on-timer.patch 0013-pcm-direct-don-t-return-bogus-buffer-levels-in-xrun-.patch 0014-conf-ucm-broxton-add-broxton-rt298-conf-files.patch 0015-pcm-direct-Fix-deadlock-in-poll_descriptors.patch 0016-ucm-Assure-the-user-input-card-name-not-to-exceed-ma.patch 0017-ucm-Load-device-specific-configuration-file-based-on.patch 0018-ucm-Add-command-get-_file-to-get-the-config-file-nam.patch 0019-topology-Fix-incorrect-license-in-source-comments.patch 0020-conf-cards-add-support-for-pistachio-card.patch 0021-pcm-multi-Drop-the-fixed-slave_map-in-snd_pcm_multi_.patch 0022-conf-Add-card-config-for-Intel-HDMI-DP-LPE-audio.patch 0023-pcm-Avoid-lock-for-snd_pcm_nonblock.patch 0024-pcm-Disable-locking-in-async-mode.patch 0025-pcm-dmix-Allow-disabling-x86-optimizations.patch 0026-pcm-dmix_rewind-corrupts-application-pointer-fix.patch 0027-pcm-direct-fix-race-on-clearing-timer-events.patch 0028-pcm-file-Enable-file-writing-for-capture-path.patch OBS-URL: https://build.opensuse.org/request/show/483406 OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/alsa?expand=0&rev=210
44 lines
1.5 KiB
Diff
44 lines
1.5 KiB
Diff
From b5a2c06f6c5d69fc71ef648af95a044ee1dc25d0 Mon Sep 17 00:00:00 2001
|
|
From: Takashi Iwai <tiwai@suse.de>
|
|
Date: Thu, 9 Feb 2017 17:23:22 +0100
|
|
Subject: [PATCH 23/43] pcm: Avoid lock for snd_pcm_nonblock()
|
|
|
|
snd_pcm_nonblock() is called as snd_pcm_abort(). Since
|
|
snd_pcm_abort() is called often from a signal handler to clean things
|
|
up (e.g. aplay does it), we may face a deadlock if the signal is
|
|
raised during the locked operation.
|
|
|
|
There can be some way to check the deadlock state, but they would cost
|
|
much. Since the race condition of snd_pcm_nonblock() is quite small,
|
|
let's just drop the locking inside snd_pcm_nonblock() as a
|
|
workaround.
|
|
|
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
|
---
|
|
src/pcm/pcm.c | 7 +++++--
|
|
1 file changed, 5 insertions(+), 2 deletions(-)
|
|
|
|
--- a/src/pcm/pcm.c
|
|
+++ b/src/pcm/pcm.c
|
|
@@ -759,7 +759,10 @@ int snd_pcm_nonblock(snd_pcm_t *pcm, int
|
|
int err = 0;
|
|
|
|
assert(pcm);
|
|
- __snd_pcm_lock(pcm); /* forced lock due to pcm field change */
|
|
+ /* FIXME: __snd_pcm_lock() call below is commented out because of the
|
|
+ * the possible deadlock in signal handler calling snd_pcm_abort()
|
|
+ */
|
|
+ /* __snd_pcm_lock(pcm); */ /* forced lock due to pcm field change */
|
|
if ((err = pcm->ops->nonblock(pcm->op_arg, nonblock)) < 0)
|
|
goto unlock;
|
|
if (nonblock == 2) {
|
|
@@ -775,7 +778,7 @@ int snd_pcm_nonblock(snd_pcm_t *pcm, int
|
|
pcm->mode &= ~SND_PCM_NONBLOCK;
|
|
}
|
|
unlock:
|
|
- __snd_pcm_unlock(pcm);
|
|
+ /* __snd_pcm_unlock(pcm); */ /* FIXME: see above */
|
|
return err;
|
|
}
|
|
|