Fix memory leak in exception code
PR gdb/24475 concerns a memory leak coming from gdb's exception handling code. The leak occurs because throw_exception_sjlj does not arrange to destroy the exception object it is passed. However, because gdb_exception has a destructor, it's undefined to longjmp in this situation. This patch fixes the problem by avoiding the need to run any destructors in gdb_rl_callback_handler, by making the gdb_exception "static". gdb/ChangeLog 2019-04-25 Tom Tromey <tromey@adacore.com> PR gdb/24475: * event-top.c (gdb_rl_callback_handler): Make "gdb_rl_expt" static.
This commit is contained in:
parent
94aeb44b00
commit
3d1cbb7893
@ -1,3 +1,9 @@
|
||||
2019-04-25 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
PR gdb/24475:
|
||||
* event-top.c (gdb_rl_callback_handler): Make "gdb_rl_expt"
|
||||
static.
|
||||
|
||||
2019-04-25 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
* xml-support.c (struct gdb_xml_parser) <set_error>: Take an
|
||||
|
@ -205,11 +205,15 @@ gdb_rl_callback_read_char_wrapper (gdb_client_data client_data)
|
||||
static void
|
||||
gdb_rl_callback_handler (char *rl) noexcept
|
||||
{
|
||||
struct gdb_exception gdb_rl_expt;
|
||||
/* This is static to avoid undefined behavior when calling longjmp
|
||||
-- gdb_exception has a destructor with side effects. */
|
||||
static struct gdb_exception gdb_rl_expt;
|
||||
struct ui *ui = current_ui;
|
||||
|
||||
try
|
||||
{
|
||||
/* Ensure the exception is reset on each call. */
|
||||
gdb_rl_expt = {};
|
||||
ui->input_handler (gdb::unique_xmalloc_ptr<char> (rl));
|
||||
}
|
||||
catch (gdb_exception &ex)
|
||||
|
Loading…
Reference in New Issue
Block a user