diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2011-06-29 20:51:10 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2011-06-29 20:51:10 +0000 |
commit | 0d1b033387342e34b9d3a973dfe40d31dc1a07b4 (patch) | |
tree | 534b87048a872685d20fd4ed7259bd961d0eb2be /readline | |
parent | gas/ (diff) | |
download | binutils-gdb-0d1b033387342e34b9d3a973dfe40d31dc1a07b4.tar.gz binutils-gdb-0d1b033387342e34b9d3a973dfe40d31dc1a07b4.tar.bz2 binutils-gdb-0d1b033387342e34b9d3a973dfe40d31dc1a07b4.zip |
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.
Diffstat (limited to 'readline')
-rw-r--r-- | readline/ChangeLog.gdb | 8 | ||||
-rw-r--r-- | readline/Makefile.in | 2 | ||||
-rw-r--r-- | readline/xfree.c | 7 | ||||
-rw-r--r-- | readline/xmalloc.h | 3 |
4 files changed, 19 insertions, 1 deletions
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 <jan.kratochvil@redhat.com> + + 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 <jan.kratochvil@redhat.com> 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 <stdio.h> + #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 *)); |