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.
This commit is contained in:
parent
6e80035f26
commit
2f1aa1dd6d
3 changed files with 46 additions and 2 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
42
audio/esound/patches/patch-ac
Normal file
42
audio/esound/patches/patch-ac
Normal file
|
@ -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);
|
Loading…
Reference in a new issue