1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
# DP: bash-4.2 upstream patch 008
BASH PATCH REPORT
=================
Bash-Release: 4.2
Patch-ID: bash42-008
Bug-Reported-by: Doug McMahon <mc2man@optonline.net>
Bug-Reference-ID: <1299441211.2535.11.camel@doug-XPS-M1330>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2011-03/msg00050.html
Bug-Description:
Bash-4.2 does not attempt to save the shell history on receipt of a
terminating signal that is handled synchronously. Unfortunately, the
`close' button on most X11 terminal emulators sends SIGHUP, which
kills the shell.
This is a very small patch to save the history in the case that an
interactive shell receives a SIGHUP or SIGTERM while in readline and
reading a command.
The next version of bash will do this differently.
Patch (apply with `patch -p0'):
--- a/bash/patchlevel.h
+++ b/bash/patchlevel.h
@@ -25,6 +25,6 @@
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
looks for to find the patch level (for the sccs version string). */
-#define PATCHLEVEL 7
+#define PATCHLEVEL 8
#endif /* _PATCHLEVEL_H_ */
--- a/bash/sig.c
+++ b/bash/sig.c
@@ -46,6 +46,7 @@
#if defined (READLINE)
# include "bashline.h"
+# include <readline/readline.h>
#endif
#if defined (HISTORY)
@@ -62,6 +63,7 @@
#if defined (HISTORY)
extern int history_lines_this_session;
#endif
+extern int no_line_editing;
extern void initialize_siglist ();
@@ -505,7 +507,10 @@
{
#if defined (HISTORY)
/* XXX - will inhibit history file being written */
- history_lines_this_session = 0;
+# if defined (READLINE)
+ if (interactive_shell == 0 || interactive == 0 || (sig != SIGHUP && sig != SIGTERM) || no_line_editing || (RL_ISSTATE (RL_STATE_READCMD) == 0))
+# endif
+ history_lines_this_session = 0;
#endif
terminate_immediately = 0;
termsig_handler (sig);
|