1
0
forked from aniani/vim

updated for version 7.4.022

Problem:    Deadlock while exiting, because of allocating memory.
Solution:   Do not use gettext() in deathtrap(). (James McCoy)
This commit is contained in:
Bram Moolenaar
2013-09-05 21:41:39 +02:00
parent 9be4481892
commit bec9c20884
3 changed files with 18 additions and 7 deletions

View File

@@ -957,8 +957,10 @@ mch_didjmp()
/*
* This function handles deadly signals.
* It tries to preserve any swap file and exit properly.
* It tries to preserve any swap files and exit properly.
* (partly from Elvis).
* NOTE: Avoid unsafe functions, such as allocating memory, they can result in
* a deadlock.
*/
static RETSIGTYPE
deathtrap SIGDEFARG(sigarg)
@@ -1090,18 +1092,23 @@ deathtrap SIGDEFARG(sigarg)
}
if (entered == 2)
{
OUT_STR(_("Vim: Double signal, exiting\n"));
/* No translation, it may call malloc(). */
OUT_STR("Vim: Double signal, exiting\n");
out_flush();
getout(1);
}
/* No translation, it may call malloc(). */
#ifdef SIGHASARG
sprintf((char *)IObuff, _("Vim: Caught deadly signal %s\n"),
sprintf((char *)IObuff, "Vim: Caught deadly signal %s\n",
signal_info[i].name);
#else
sprintf((char *)IObuff, _("Vim: Caught deadly signal\n"));
sprintf((char *)IObuff, "Vim: Caught deadly signal\n");
#endif
preserve_exit(); /* preserve files and exit */
/* Preserve files and exit. This sets the really_exiting flag to prevent
* calling free(). */
preserve_exit();
#ifdef NBDEBUG
reset_signals();