mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-03-06 05:52:32 -08:00
Avoid interleaving stderr lines when shutting down
* src/emacs.c (shut_down_emacs) [!DOS_NT]: Avoid interleaving to stderr in the usual case, by using a single write and by appending a newline. * src/sysdep.c (emacs_backtrace) [HAVE_BACKTRACE_SYMBOLS_FD]: Omit newline since shut_down_emacs now does that.
This commit is contained in:
parent
9a34591ddd
commit
34810ab4f9
2 changed files with 23 additions and 17 deletions
38
src/emacs.c
38
src/emacs.c
|
|
@ -2454,23 +2454,29 @@ shut_down_emacs (int sig, Lisp_Object stuff)
|
|||
|
||||
/* If we are controlling the terminal, reset terminal modes. */
|
||||
#ifndef DOS_NT
|
||||
{
|
||||
pid_t pgrp = getpgrp ();
|
||||
pid_t tpgrp = tcgetpgrp (0);
|
||||
if ((tpgrp != -1) && tpgrp == pgrp)
|
||||
{
|
||||
reset_all_sys_modes ();
|
||||
if (sig && sig != SIGTERM)
|
||||
{
|
||||
static char const format[] = "Fatal error %d: ";
|
||||
char buf[sizeof format - 2 + INT_STRLEN_BOUND (int)];
|
||||
int buflen = sprintf (buf, format, sig);
|
||||
char const *sig_desc = safe_strsignal (sig);
|
||||
pid_t tpgrp = tcgetpgrp (STDIN_FILENO);
|
||||
if (tpgrp != -1 && tpgrp == getpgrp ())
|
||||
{
|
||||
reset_all_sys_modes ();
|
||||
if (sig && sig != SIGTERM)
|
||||
{
|
||||
static char const fmt[] = "Fatal error %d: %n%s\n";
|
||||
char buf[max ((sizeof fmt - sizeof "%d%n%s\n"
|
||||
+ INT_STRLEN_BOUND (int) + 1),
|
||||
min (PIPE_BUF, MAX_ALLOCA))];
|
||||
char const *sig_desc = safe_strsignal (sig);
|
||||
int nlen;
|
||||
int buflen = snprintf (buf, sizeof buf, fmt, sig, &nlen, sig_desc);
|
||||
if (0 <= buflen && buflen < sizeof buf)
|
||||
emacs_write (STDERR_FILENO, buf, buflen);
|
||||
emacs_write (STDERR_FILENO, sig_desc, strlen (sig_desc));
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
emacs_write (STDERR_FILENO, buf, nlen);
|
||||
emacs_write (STDERR_FILENO, sig_desc, strlen (sig_desc));
|
||||
emacs_write (STDERR_FILENO, fmt + sizeof fmt - 2, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
fflush (stdout);
|
||||
reset_all_sys_modes ();
|
||||
|
|
|
|||
|
|
@ -2436,7 +2436,7 @@ emacs_backtrace (int backtrace_limit)
|
|||
|
||||
if (npointers)
|
||||
{
|
||||
emacs_write (STDERR_FILENO, "\nBacktrace:\n", 12);
|
||||
emacs_write (STDERR_FILENO, "Backtrace:\n", 11);
|
||||
backtrace_symbols_fd (buffer, npointers, STDERR_FILENO);
|
||||
if (bounded_limit < npointers)
|
||||
emacs_write (STDERR_FILENO, "...\n", 4);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue