From 685e9fd1355b9b7c125056f6e1a8b001a14801d2 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Wed, 29 Jun 2011 20:51:10 +0000 Subject: readline/ Avoid free from a signal handler. * Makefile.in (xfree.o): Add readline.h. * xfree.c: Include stdio.h and readline.h. (xfree): Return on RL_STATE_SIGHANDLER. * xmalloc.h (xfree): New definition. --- readline/ChangeLog.gdb | 8 ++++++++ readline/Makefile.in | 2 +- readline/xfree.c | 7 +++++++ readline/xmalloc.h | 3 +++ 4 files changed, 19 insertions(+), 1 deletion(-) (limited to 'readline') diff --git a/readline/ChangeLog.gdb b/readline/ChangeLog.gdb index 22766a40fc3..229aa31e9d4 100644 --- a/readline/ChangeLog.gdb +++ b/readline/ChangeLog.gdb @@ -1,3 +1,11 @@ +2011-06-29 Jan Kratochvil + + Avoid free from a signal handler. + * Makefile.in (xfree.o): Add readline.h. + * xfree.c: Include stdio.h and readline.h. + (xfree): Return on RL_STATE_SIGHANDLER. + * xmalloc.h (xfree): New definition. + 2011-05-11 Jan Kratochvil Workaround gdb.base/completion.exp regression on readline-6.2. diff --git a/readline/Makefile.in b/readline/Makefile.in index 23194306bc1..f4ed8110a29 100644 --- a/readline/Makefile.in +++ b/readline/Makefile.in @@ -422,7 +422,7 @@ vi_mode.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h vi_mode.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h vi_mode.o: history.h ansi_stdlib.h rlstdc.h xfree.o: ${BUILD_DIR}/config.h -xfree.o: ansi_stdlib.h +xfree.o: ansi_stdlib.h readline.h xmalloc.o: ${BUILD_DIR}/config.h xmalloc.o: ansi_stdlib.h diff --git a/readline/xfree.c b/readline/xfree.c index 37a81e6c236..d3af7d9aef0 100644 --- a/readline/xfree.c +++ b/readline/xfree.c @@ -31,7 +31,10 @@ # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ +#include + #include "xmalloc.h" +#include "readline.h" /* **************************************************************** */ /* */ @@ -45,6 +48,10 @@ void xfree (string) PTR_T string; { + /* Leak a bit. */ + if (RL_ISSTATE(RL_STATE_SIGHANDLER)) + return; + if (string) free (string); } diff --git a/readline/xmalloc.h b/readline/xmalloc.h index f40d7a596a2..0fb6a1960e1 100644 --- a/readline/xmalloc.h +++ b/readline/xmalloc.h @@ -38,6 +38,9 @@ #endif /* !PTR_T */ +/* xmalloc and xrealloc should be also protected from RL_STATE_SIGHANDLER. */ +#define xfree xfree_readline + extern PTR_T xmalloc PARAMS((size_t)); extern PTR_T xrealloc PARAMS((void *, size_t)); extern void xfree PARAMS((void *)); -- cgit v1.2.1