All of lore.kernel.org
 help / color / mirror / Atom feed
From: <twischer@de.adit-jv.com>
To: patch@alsa-project.org, tiwai@suse.de
Cc: Timo Wischer <twischer@de.adit-jv.com>, alsa-devel@alsa-project.org
Subject: [PATCH - JACK IO plug 1/2] jack: Avoid call to snd_pcm_avail_update() from JACK thread
Date: Tue, 3 Jul 2018 15:59:22 +0200	[thread overview]
Message-ID: <1530626363-8808-3-git-send-email-twischer@de.adit-jv.com> (raw)
In-Reply-To: <1530626363-8808-1-git-send-email-twischer@de.adit-jv.com>

From: Timo Wischer <twischer@de.adit-jv.com>

snd_pcm_avail_update() can call snd_pcm_jack_stop() but
snd_pcm_jack_stop() should not be called by the JACK thread.
It should only be called by the thread how has called
snd_pcm_jack_start().

In addition the execution of snd_pcm_avail_update() can take a while.
Therefore it should not be called by the JACK thread to not block this
thread.

Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>

diff --git a/jack/pcm_jack.c b/jack/pcm_jack.c
index e3df4d2..5a57e13 100644
--- a/jack/pcm_jack.c
+++ b/jack/pcm_jack.c
@@ -62,13 +62,13 @@ static int snd_pcm_jack_stop(snd_pcm_ioplug_t *io);
 static int pcm_poll_block_check(snd_pcm_ioplug_t *io)
 {
 	static char buf[32];
-	snd_pcm_sframes_t avail;
+	snd_pcm_uframes_t avail;
 	snd_pcm_jack_t *jack = io->private_data;
 
 	if (io->state == SND_PCM_STATE_RUNNING ||
 	    (io->state == SND_PCM_STATE_PREPARED && io->stream == SND_PCM_STREAM_CAPTURE)) {
-		avail = snd_pcm_avail_update(io->pcm);
-		if (avail >= 0 && avail < jack->min_avail) {
+		avail = snd_pcm_ioplug_avail(io, jack->hw_ptr, io->appl_ptr);
+		if (avail < jack->min_avail) {
 			while (read(io->poll_fd, &buf, sizeof(buf)) == sizeof(buf))
 				;
 			return 1;
@@ -81,11 +81,11 @@ static int pcm_poll_block_check(snd_pcm_ioplug_t *io)
 static int pcm_poll_unblock_check(snd_pcm_ioplug_t *io)
 {
 	static char buf[1];
-	snd_pcm_sframes_t avail;
+	snd_pcm_uframes_t avail;
 	snd_pcm_jack_t *jack = io->private_data;
 
-	avail = snd_pcm_avail_update(io->pcm);
-	if (avail < 0 || avail >= jack->min_avail) {
+	avail = snd_pcm_ioplug_avail(io, jack->hw_ptr, io->appl_ptr);
+	if (avail >= jack->min_avail) {
 		write(jack->fd, &buf, 1);
 		return 1;
 	}
-- 
2.7.4

  parent reply	other threads:[~2018-07-03 13:59 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-03 13:59 [PATCH - JACK IO plug v2 0/3] snd_pcm_drain support twischer
2018-07-03 13:59 ` [PATCH - JACK IO plug 1/1] pcm: ioplug: Provide avail helper function for plugins twischer
2018-07-04  0:34   ` Takashi Sakamoto
2018-07-04  6:21     ` Takashi Iwai
2018-07-05 10:36       ` Takashi Sakamoto
2018-07-03 13:59 ` twischer [this message]
2018-07-03 13:59 ` [PATCH - JACK IO plug 2/2] jack: Update poll_fd also in draining state twischer
2018-07-03 15:37 ` [PATCH - JACK IO plug v2 0/3] snd_pcm_drain support Takashi Iwai
  -- strict thread matches above, loose matches on Subject: below --
2018-07-03 11:58 [PATCH - JACK IO plug " twischer
2018-07-03 11:58 ` [PATCH - JACK IO plug 1/2] jack: Avoid call to snd_pcm_avail_update() from JACK thread twischer
2018-07-03 12:09   ` Takashi Iwai
2018-07-03 12:23     ` twischer
2018-07-03 12:45       ` Takashi Iwai

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1530626363-8808-3-git-send-email-twischer@de.adit-jv.com \
    --to=twischer@de.adit-jv.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=patch@alsa-project.org \
    --cc=tiwai@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.