[pulseaudio-discuss] [PATCH] core, modules: Remove useless EINTR tests
Pali Rohár
pali.rohar at gmail.com
Thu Jan 16 15:35:58 UTC 2020
On Thursday 16 January 2020 17:31:17 Tanu Kaskinen wrote:
> Resurrecting this old patch...
>
> On Mon, 2019-06-03 at 15:43 +0200, Pali Rohár wrote:
> > On Tuesday 28 May 2019 16:49:19 Frédéric Danis wrote:
> > > Since commit ad447d14682 (in 2009) pa_read and pa_write take care of
> > > handling EINTR error.
> > > So, pa_read, pa_write, pa_iochannel_read and pa_iochannel_write can not
> > > exit with errno set to EINTR, and testing it is useless.
> > > ---
> > > src/modules/bluetooth/module-bluez5-device.c | 16 +-------
> > > src/modules/module-esound-sink.c | 4 +-
> > > src/modules/module-pipe-sink.c | 17 ++++-----
> > > src/modules/module-pipe-source.c | 4 +-
> > > src/modules/module-solaris.c | 4 +-
> > > src/modules/oss/module-oss.c | 10 +----
> > > src/pulsecore/fdsem.c | 40 ++++++--------------
> > > src/pulsecore/iochannel.c | 2 +-
> > > src/pulsecore/protocol-esound.c | 8 ++--
> > > src/pulsecore/protocol-simple.c | 2 +-
> > > 10 files changed, 32 insertions(+), 75 deletions(-)
> > >
> > > diff --git a/src/modules/bluetooth/module-bluez5-device.c b/src/modules/bluetooth/module-bluez5-device.c
> > > index 56c96054d..f850a3a41 100644
> > > --- a/src/modules/bluetooth/module-bluez5-device.c
> > > +++ b/src/modules/bluetooth/module-bluez5-device.c
> > > @@ -279,10 +279,6 @@ static int sco_process_render(struct userdata *u) {
> > >
> > > saved_errno = errno;
> > >
> > > - if (saved_errno == EINTR)
> > > - /* Retry right away if we got interrupted */
> > > - continue;
> > > -
> > > pa_memblock_unref(memchunk.memblock);
> > >
> > > if (saved_errno == EAGAIN) {
> > > @@ -445,11 +441,7 @@ static int a2dp_write_buffer(struct userdata *u, size_t nbytes) {
> > >
> > > if (l < 0) {
> > >
> > > - if (errno == EINTR)
> > > - /* Retry right away if we got interrupted */
> > > - continue;
> > > -
> > > - else if (errno == EAGAIN) {
> > > + if (errno == EAGAIN) {
> > > /* Hmm, apparently the socket was not writable, give up for now */
> > > pa_log_debug("Got EAGAIN on write() after POLLOUT, probably there is a temporary connection loss.");
> > > break;
> > > @@ -543,11 +535,7 @@ static int a2dp_process_push(struct userdata *u) {
> > >
> > > if (l <= 0) {
> > >
> > > - if (l < 0 && errno == EINTR)
> > > - /* Retry right away if we got interrupted */
> > > - continue;
> > > -
> > > - else if (l < 0 && errno == EAGAIN)
> > > + if (l < 0 && errno == EAGAIN)
> > > /* Hmm, apparently the socket was not readable, give up for now. */
> > > break;
> > >
> >
> > Hi! This change conflicts with "Implement reading SO_TIMESTAMP for A2DP
> > source" patch as it stops using pa_read() function. For SO_TIMESTAMP is
> > needed recvmsg() and then also handling of EINTR/EAGAIN.
>
> Thanks for pointing this out. It would have been easy for me to miss
> this, since git rebased the patch without conflicts.
This is because pa_read() was replaced by recvmsg() in bluetooth code.
So above information about EINTR is not valid for bluetooth code which
reads data, and needs to properly handle EINTR error code.
> fdsem.c had changes like this:
>
> > @@ -151,11 +151,8 @@ static void flush(pa_fdsem *f) {
> > uint64_t u;
> >
> > if ((r = pa_read(f->efd, &u, sizeof(u), NULL)) != sizeof(u)) {
> > -
> > - if (r >= 0 || errno != EINTR) {
> > - pa_log_error("Invalid read from eventfd: %s", r < 0 ? pa_cstrerror(errno) : "EOF");
> > - pa_assert_not_reached();
> > - }
> > + pa_log_error("Invalid read from eventfd: %s", r < 0 ? pa_cstrerror(errno) : "EOF");
> > + pa_assert_not_reached();
> >
> > continue;
>
> The "continue" statement after the assertion is unnecessary, so I
> removed it.
>
> I created an MR for this patch, since we now push all changes through
> GitLab:
> https://gitlab.freedesktop.org/pulseaudio/pulseaudio/merge_requests/238
>
> I didn't merge the change yet, because we're currently in freeze. I'll
> merge it once 14.0 is out.
>
> Thanks for the patch, Frédéric, and sorry for the long delay!
>
--
Pali Rohár
pali.rohar at gmail.com
More information about the pulseaudio-discuss
mailing list