diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c43052e07a3..43bc4df2776 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2021-01-07 Pedro Alves + Simon Marchi + Tom de Vries + + PR remote/26614 + * remote.c (remote_async_inferior_event_handler): Hold a strong + reference to the remote target while handling an event. + 2021-01-01 Joel Brobecker * gdbarch.sh: Update copyright year range. diff --git a/gdb/remote.c b/gdb/remote.c index 1407c23c3ce..4896c2af4d9 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