29 lines
993 B
Diff
29 lines
993 B
Diff
|
[gdb] Fix use of invalid pointer in remote_async_inferior_event_handler
|
||
|
|
||
|
As proposed by palves here (
|
||
|
https://sourceware.org/bugzilla/show_bug.cgi?id=26614#c20 ).
|
||
|
|
||
|
---
|
||
|
gdb/remote.c | 6 +++++-
|
||
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/gdb/remote.c b/gdb/remote.c
|
||
|
index ba9e6d6e9b..556de6033f 100644
|
||
|
--- a/gdb/remote.c
|
||
|
+++ b/gdb/remote.c
|
||
|
@@ -14163,9 +14163,13 @@ remote_async_serial_handler (struct serial *scb, void *context)
|
||
|
static void
|
||
|
remote_async_inferior_event_handler (gdb_client_data data)
|
||
|
{
|
||
|
+ remote_target *remote = (remote_target *) data;
|
||
|
+ /* Hold a strong reference to the remote target while handling an
|
||
|
+ event, since that could result in closing the connection. */
|
||
|
+ auto remote_ref = target_ops_ref::new_reference (remote);
|
||
|
+
|
||
|
inferior_event_handler (INF_REG_EVENT);
|
||
|
|
||
|
- remote_target *remote = (remote_target *) data;
|
||
|
remote_state *rs = remote->get_remote_state ();
|
||
|
|
||
|
/* inferior_event_handler may have consumed an event pending on the
|