summaryrefslogtreecommitdiff
path: root/lib-src
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2018-12-06 08:54:00 -0800
committerPaul Eggert <eggert@cs.ucla.edu>2018-12-06 10:48:04 -0800
commit2f985977f691a37a6d45298128b88d0cefcc93a1 (patch)
treeae4c47f464e89d2a48593ea17da7ac3f4dd10058 /lib-src
parentc5b6f1672bc62d9ffdd3c7200074727a4608af03 (diff)
downloademacs-2f985977f691a37a6d45298128b88d0cefcc93a1.tar.gz
Fix emacsclient hang when backgrounded
Problem reported by Kaushal Modi in: https://lists.gnu.org/r/emacs-devel/2018-12/msg00083.html The tcdrain call replaced an fdatasync call which had no effect on the tty, so removing it entirely shouldn’t cause problems. The fdatasync call replaced an fsync call which also had no effect on the tty, and the fsync call seems to be badly-merged revenant of emacsclient’s old (circa 2004) way of communicating to and from Emacs via FILE * streams, where fsync was apparently needed when talking to sockets. * lib-src/emacsclient.c [!DOS_NT]: Don’t include termios.h. (flush_stdout): Remove. All callers removed. (main): Do not drain the tty after "Waiting for Emacs..." message. There should be no need to drain, and draining it might send us a SIGTTOU. Do not fflush stdout just before exiting, as exiting does that for us.
Diffstat (limited to 'lib-src')
-rw-r--r--lib-src/emacsclient.c16
1 files changed, 1 insertions, 15 deletions
diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c
index 7de36651143..653ab955df5 100644
--- a/lib-src/emacsclient.c
+++ b/lib-src/emacsclient.c
@@ -66,10 +66,6 @@ char *w32_getenv (const char *);
#endif /* !WINDOWSNT */
-#ifndef DOS_NT
-# include <termios.h>
-#endif
-
#include <ctype.h>
#include <errno.h>
#include <getopt.h>
@@ -1740,15 +1736,6 @@ start_daemon_and_retry_set_socket (void)
return emacs_socket;
}
-/* Flush standard output and its underlying file descriptor. */
-static void
-flush_stdout (HSOCKET emacs_socket)
-{
- fflush (stdout);
- while (tcdrain (STDOUT_FILENO) != 0 && errno == EINTR)
- act_on_signals (emacs_socket);
-}
-
int
main (int argc, char **argv)
{
@@ -1964,7 +1951,7 @@ main (int argc, char **argv)
printf ("Waiting for Emacs...");
skiplf = false;
}
- flush_stdout (emacs_socket);
+ fflush (stdout);
/* Now, wait for an answer and print any messages. */
while (exit_status == EXIT_SUCCESS)
@@ -2067,7 +2054,6 @@ main (int argc, char **argv)
if (!skiplf)
printf ("\n");
- flush_stdout (emacs_socket);
if (rl < 0)
exit_status = EXIT_FAILURE;