Thu Jul 31 14:03:16 2008 UTC ()
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.
(drochner)
diff -r1.70 -r1.71 pkgsrc/audio/esound/Makefile
diff -r1.25 -r1.26 pkgsrc/audio/esound/distinfo
diff -r0 -r1.5 pkgsrc/audio/esound/patches/patch-ac
--- pkgsrc/audio/esound/Attic/Makefile 2008/07/30 10:24:40 1.70
+++ pkgsrc/audio/esound/Attic/Makefile 2008/07/31 14:03:16 1.71
| @@ -1,16 +1,17 @@ | | | @@ -1,16 +1,17 @@ |
1 | # $NetBSD: Makefile,v 1.70 2008/07/30 10:24:40 drochner Exp $ | | 1 | # $NetBSD: Makefile,v 1.71 2008/07/31 14:03:16 drochner Exp $ |
2 | | | 2 | |
3 | DISTNAME= esound-0.2.39 | | 3 | DISTNAME= esound-0.2.39 |
| | | 4 | PKGREVISION= 1 |
4 | CATEGORIES= audio | | 5 | CATEGORIES= audio |
5 | MASTER_SITES= ${MASTER_SITE_GNOME:=sources/esound/0.2/} | | 6 | MASTER_SITES= ${MASTER_SITE_GNOME:=sources/esound/0.2/} |
6 | EXTRACT_SUFX= .tar.bz2 | | 7 | EXTRACT_SUFX= .tar.bz2 |
7 | | | 8 | |
8 | MAINTAINER= pkgsrc-users@NetBSD.org | | 9 | MAINTAINER= pkgsrc-users@NetBSD.org |
9 | HOMEPAGE= http://www.tux.org/~ricdude/EsounD.html | | 10 | HOMEPAGE= http://www.tux.org/~ricdude/EsounD.html |
10 | COMMENT= The Enlightened sound daemon | | 11 | COMMENT= The Enlightened sound daemon |
11 | | | 12 | |
12 | PKG_INSTALLATION_TYPES= overwrite pkgviews | | 13 | PKG_INSTALLATION_TYPES= overwrite pkgviews |
13 | PKG_DESTDIR_SUPPORT= user-destdir | | 14 | PKG_DESTDIR_SUPPORT= user-destdir |
14 | | | 15 | |
15 | USE_LIBTOOL= YES | | 16 | USE_LIBTOOL= YES |
16 | USE_TOOLS+= pkg-config | | 17 | USE_TOOLS+= pkg-config |
--- pkgsrc/audio/esound/Attic/distinfo 2008/07/29 21:58:13 1.25
+++ pkgsrc/audio/esound/Attic/distinfo 2008/07/31 14:03:16 1.26
| @@ -1,7 +1,8 @@ | | | @@ -1,7 +1,8 @@ |
1 | $NetBSD: distinfo,v 1.25 2008/07/29 21:58:13 wiz Exp $ | | 1 | $NetBSD: distinfo,v 1.26 2008/07/31 14:03:16 drochner Exp $ |
2 | | | 2 | |
3 | SHA1 (esound-0.2.39.tar.bz2) = 71dd61502224309784f1d9c274914731cde7c628 | | 3 | SHA1 (esound-0.2.39.tar.bz2) = 71dd61502224309784f1d9c274914731cde7c628 |
4 | RMD160 (esound-0.2.39.tar.bz2) = 1f719fdefe2bb9bc38d7dbf178d84e45451d8249 | | 4 | RMD160 (esound-0.2.39.tar.bz2) = 1f719fdefe2bb9bc38d7dbf178d84e45451d8249 |
5 | Size (esound-0.2.39.tar.bz2) = 423581 bytes | | 5 | Size (esound-0.2.39.tar.bz2) = 423581 bytes |
6 | SHA1 (patch-aa) = d734a1004026287071e571ceb3fd346b809a6a30 | | 6 | SHA1 (patch-aa) = d734a1004026287071e571ceb3fd346b809a6a30 |
7 | SHA1 (patch-ab) = cb6d32ce121e46d53286c1d9bdb9b15c411d0c6c | | 7 | SHA1 (patch-ab) = cb6d32ce121e46d53286c1d9bdb9b15c411d0c6c |
| | | 8 | SHA1 (patch-ac) = e36246569d85f0baf957d2faa5f787a214054894 |
$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);