diff options
author | drochner <drochner> | 2008-07-31 14:03:16 +0000 |
---|---|---|
committer | drochner <drochner> | 2008-07-31 14:03:16 +0000 |
commit | 240178480c8374c38e8a025ba3c2b12b74ca0347 (patch) | |
tree | 7f4b76aad0ca2b76439194308abb9b830c2d4be7 | |
parent | e73bff214bf36375ca6143f6dccf8fbd7c91974a (diff) | |
download | pkgsrc-240178480c8374c38e8a025ba3c2b12b74ca0347.tar.gz |
In the new nonblocking write code, abort on write errors, especially
on EPIPE. This fixes Gnome session hangs if sounds are switched off.
See Gnome bugzilla #542391 for details. Bump PKGREVISION.
-rw-r--r-- | audio/esound/Makefile | 3 | ||||
-rw-r--r-- | audio/esound/distinfo | 3 | ||||
-rw-r--r-- | audio/esound/patches/patch-ac | 42 |
3 files changed, 46 insertions, 2 deletions
diff --git a/audio/esound/Makefile b/audio/esound/Makefile index 51bf3a020fd..60790bce00a 100644 --- a/audio/esound/Makefile +++ b/audio/esound/Makefile @@ -1,6 +1,7 @@ -# $NetBSD: Makefile,v 1.70 2008/07/30 10:24:40 drochner Exp $ +# $NetBSD: Makefile,v 1.71 2008/07/31 14:03:16 drochner Exp $ DISTNAME= esound-0.2.39 +PKGREVISION= 1 CATEGORIES= audio MASTER_SITES= ${MASTER_SITE_GNOME:=sources/esound/0.2/} EXTRACT_SUFX= .tar.bz2 diff --git a/audio/esound/distinfo b/audio/esound/distinfo index 4a225d7cc18..71480db3535 100644 --- a/audio/esound/distinfo +++ b/audio/esound/distinfo @@ -1,7 +1,8 @@ -$NetBSD: distinfo,v 1.25 2008/07/29 21:58:13 wiz Exp $ +$NetBSD: distinfo,v 1.26 2008/07/31 14:03:16 drochner Exp $ SHA1 (esound-0.2.39.tar.bz2) = 71dd61502224309784f1d9c274914731cde7c628 RMD160 (esound-0.2.39.tar.bz2) = 1f719fdefe2bb9bc38d7dbf178d84e45451d8249 Size (esound-0.2.39.tar.bz2) = 423581 bytes SHA1 (patch-aa) = d734a1004026287071e571ceb3fd346b809a6a30 SHA1 (patch-ab) = cb6d32ce121e46d53286c1d9bdb9b15c411d0c6c +SHA1 (patch-ac) = e36246569d85f0baf957d2faa5f787a214054894 diff --git a/audio/esound/patches/patch-ac b/audio/esound/patches/patch-ac new file mode 100644 index 00000000000..a297d9d0672 --- /dev/null +++ b/audio/esound/patches/patch-ac @@ -0,0 +1,42 @@ +$NetBSD: patch-ac,v 1.5 2008/07/31 14:03:16 drochner Exp $ + +--- esdlib.c.orig 2008-07-15 17:35:15.000000000 +0200 ++++ esdlib.c +@@ -90,7 +90,7 @@ read_timeout (int fd, char *buf, size_t + do { + pfd[0].revents = 0; + rv = poll (pfd, 1, 100); +- } while (rv == -1 && errno == EINTR); ++ } while (rv == -1 && (errno == EINTR || errno == EAGAIN)); + + if (rv < 1 || !(pfd[0].revents & POLLIN)) { + errno = ETIMEDOUT; +@@ -138,9 +138,9 @@ write_timeout (int fd, const char *buf, + do { + pfd[0].revents = 0; + rv = poll (pfd, 1, 100); +- } while (rv == -1 && errno == EINTR); ++ } while (rv == -1 && (errno == EINTR || errno == EAGAIN)); + +- if (rv < 1 || !(pfd[0].revents & POLLOUT)) { ++ if (rv < 1 || (pfd[0].revents & (POLLERR | POLLHUP | POLLOUT)) != POLLOUT) { + fcntl (fd, F_SETFL, flags); + errno = ETIMEDOUT; + return -1; +@@ -150,8 +150,14 @@ write_timeout (int fd, const char *buf, + n = write (fd, buf + nwritten, buflen - nwritten); + } while (n == -1 && errno == EINTR); + +- if (n > 0) +- nwritten += n; ++ if (n == -1) { ++ rv = errno; ++ fcntl (fd, F_SETFL, flags); ++ errno = rv; ++ return -1; ++ } ++ ++ nwritten += n; + } while (nwritten < buflen); + + fcntl (fd, F_SETFL, flags); |