From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: [PATCH - IOPLUG DRAIN 0/2] Date: Thu, 22 Mar 2018 17:22:49 +0100 Message-ID: References: <1521726537-7651-1-git-send-email-twischer@de.adit-jv.com> Mime-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by alsa0.perex.cz (Postfix) with ESMTP id 1ADD7267282 for ; Thu, 22 Mar 2018 17:22:52 +0100 (CET) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: "Wischer, Timo (ADITG/ESB)" Cc: "alsa-devel@alsa-project.org" List-Id: alsa-devel@alsa-project.org On Thu, 22 Mar 2018 16:17:10 +0100, Wischer, Timo (ADITG/ESB) wrote: > > > I don't understand. The pulse plugin calls pa_stream_drain(), and > > pulse_wait_operation() to wait until the drain finishes. What does it > > have to do with threading? > > As far as I understand you patch io->data->callback->drain() will not be called in nonblocking mode. > + if (io->data->state == SND_PCM_STATE_DRAINING) { > + if (io->data->nonblock) > + return -EAGAIN; > + > + if (io->data->callback->drain) { > + err = io->data->callback->drain(io->data); > + if (err < 0) > + return err; > + } > + } > > Therefore how should call pa_stream_drain() in case of nonblocking mode? The application needs to sync manually via poll() instead. It's also the behavior of the kernel driver, which ioplug follows. Takashi