Commit d050de75 authored by Paul Eggert's avatar Paul Eggert
Browse files

Fix emacsclient terminal corruption when in background.

* emacsclient.c (handle_sigcont): Check for tcgetpgrp failure.
Cancel the continue only if tty.  Send SIGTTIN to the process
group, not SIGSTOP to self, as this is what the glibc manual
recommends.
(main): If tty, and if started in the background, send SIGTTIN
to the process group.

Fixes: debbugs:16892
parent eb67db41
2014-03-09 Paul Eggert <eggert@cs.ucla.edu>
Fix emacsclient terminal corruption when in background (Bug#16892).
* emacsclient.c (handle_sigcont): Check for tcgetpgrp failure.
Cancel the continue only if tty. Send SIGTTIN to the process
group, not SIGSTOP to self, as this is what the glibc manual
recommends.
(main): If tty, and if started in the background, send SIGTTIN
to the process group.
2014-02-25 Andreas Amann <a.amann@ucc.ie> (tiny change)
Fix emacsclient's handling of SIGCONT (Bug#16883).
......
......@@ -1105,16 +1105,18 @@ static void
handle_sigcont (int signalnum)
{
int old_errno = errno;
pid_t pgrp = getpgrp ();
pid_t tcpgrp = tcgetpgrp (1);
if (tcgetpgrp (1) == getpgrp ())
if (tcpgrp == pgrp)
{
/* We are in the foreground. */
send_to_emacs (emacs_socket, "-resume \n");
}
else if (tty)
else if (0 <= tcpgrp && tty)
{
/* We are in the background; cancel the continue. */
raise (SIGSTOP);
kill (-pgrp, SIGTTIN);
}
signal (signalnum, handle_sigcont);
......@@ -1554,6 +1556,14 @@ main (int argc, char **argv)
exit (EXIT_FAILURE);
}
if (tty)
{
pid_t pgrp = getpgrp ();
pid_t tcpgrp = tcgetpgrp (1);
if (0 <= tcpgrp && tcpgrp != pgrp)
kill (-pgrp, SIGTTIN);
}
/* If alternate_editor is the empty string, start the emacs daemon
in case of failure to connect. */
start_daemon_if_needed = (alternate_editor
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment