X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fserver%2Fgdb_server.c;h=77142dfadec8acfd5c2ebf41560cd491ded3ca38;hb=838cd58e24a18102b8a140df9fa993fe65706828;hp=9503a130a6cfb7b1b9e43c78abe7d2a91657bc22;hpb=c62fb3fa81efa46f073db46a7eb7f2a91b16909a;p=fw%2Fopenocd diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c index 9503a130a..77142dfad 100644 --- a/src/server/gdb_server.c +++ b/src/server/gdb_server.c @@ -833,9 +833,6 @@ static int gdb_new_connection(struct connection *connection) breakpoint_clear_target(gdb_service->target); watchpoint_clear_target(gdb_service->target); - /* register callback to be informed about target events */ - target_register_event_callback(gdb_target_callback_event_handler, connection); - /* remove the initial ACK from the incoming buffer */ if ((retval = gdb_get_char(connection, &initial_ack)) != ERROR_OK) return retval; @@ -873,6 +870,13 @@ static int gdb_new_connection(struct connection *connection) target_name(gdb_service->target), target_state_name(gdb_service->target)); + /* DANGER! If we fail subsequently, we must remove this handler, + * otherwise we occasionally see crashes as the timer can invoke the + * callback fn. + * + * register callback to be informed about target events */ + target_register_event_callback(gdb_target_callback_event_handler, connection); + return ERROR_OK; }