GNU bug report logs -
#8303
Emacs daemon initialization should not ignore I/O errors
Previous Next
Reported by: Paul Eggert <eggert <at> cs.ucla.edu>
Date: Sun, 20 Mar 2011 23:35:01 UTC
Severity: minor
Done: Paul Eggert <eggert <at> cs.ucla.edu>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your bug report
#8303: Emacs daemon initialization should not ignore I/O errors
which was filed against the emacs package, has been closed.
The explanation is attached below, along with your original report.
If you require more details, please reply to 8303 <at> debbugs.gnu.org.
--
8303: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=8303
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
I committed a fix to the trunk for this,
as part of a recent merge (bzr 103721).
[Message part 3 (message/rfc822, inline)]
Severity: minor
daemon-initialized currently ignores I/O errors when setting
up the daemon, but it should report them, on the off chance that
system resources are low so that (for example) one cannot open
/dev/null or dup a file descriptor. I plan to install the following
patch in the trunk, to address this.
2011-03-20 Paul Eggert <eggert <at> cs.ucla.edu>
* emacs.c (Fdaemon_initialized): Do not ignore I/O errors.
--- src/emacs.c 2011-03-17 16:32:03 +0000
+++ src/emacs.c 2011-03-20 21:03:44 +0000
@@ -2312,6 +2312,7 @@
(void)
{
int nfd;
+ int err = 0;
if (!IS_DAEMON)
error ("This function can only be called if emacs is run as a daemon");
@@ -2324,10 +2325,11 @@
/* Get rid of stdin, stdout and stderr. */
nfd = open ("/dev/null", O_RDWR);
- dup2 (nfd, 0);
- dup2 (nfd, 1);
- dup2 (nfd, 2);
- close (nfd);
+ err |= nfd < 0;
+ err |= dup2 (nfd, 0) < 0;
+ err |= dup2 (nfd, 1) < 0;
+ err |= dup2 (nfd, 2) < 0;
+ err |= close (nfd) != 0;
/* Closing the pipe will notify the parent that it can exit.
FIXME: In case some other process inherited the pipe, closing it here
@@ -2336,10 +2338,13 @@
Instead, we should probably close the pipe in start-process and
call-process to make sure the pipe is never inherited by
subprocesses. */
- write (daemon_pipe[1], "\n", 1);
- close (daemon_pipe[1]);
+ err |= write (daemon_pipe[1], "\n", 1) < 0;
+ err |= close (daemon_pipe[1]) != 0;
/* Set it to an invalid value so we know we've already run this function. */
daemon_pipe[1] = -1;
+
+ if (err)
+ error ("I/O error during daemon initialization");
return Qt;
}
This bug report was last modified 14 years and 64 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.