From 21e1bee4d23dc4a91ccccd69947fc109b4312230 Mon Sep 17 00:00:00 2001 From: Paul Pluzhnikov Date: Thu, 12 Nov 2009 00:47:39 +0000 Subject: [PATCH] gdb/ChangeLog: 2009-11-11 Paul Pluzhnikov PR gdb/10838 * linux-thread-db.c (thread_db_info): New member. (disable_thread_event_reporting): Call td_ta_clear_event. gdbserver/ChangeLog: 2009-11-11 Paul Pluzhnikov PR gdb/10838 * thread-db.c (thread_db_free): Call td_ta_clear_event. --- gdb/ChangeLog | 6 ++++++ gdb/gdbserver/ChangeLog | 5 +++++ gdb/gdbserver/thread-db.c | 17 +++++++++++++++++ gdb/linux-thread-db.c | 9 ++++++--- 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b840509b7bb..011f292c507 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2009-11-11 Paul Pluzhnikov + + PR gdb/10838 + * linux-thread-db.c (thread_db_info): New member. + (disable_thread_event_reporting): Call td_ta_clear_event. + 2009-11-11 Keith Seitz * linespec.c (lookup_prefix_sym): Lookup the symbol diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 59979c82fcf..30874338703 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,8 @@ +2009-11-11 Paul Pluzhnikov + + PR gdb/10838 + * thread-db.c (thread_db_free): Call td_ta_clear_event. + 2009-11-03 Nathan Sidwell * configure.ac (i[34567]86-*): Check if we're targetting x86-64 diff --git a/gdb/gdbserver/thread-db.c b/gdb/gdbserver/thread-db.c index 06dfe3510a9..8af0539da7e 100644 --- a/gdb/gdbserver/thread-db.c +++ b/gdb/gdbserver/thread-db.c @@ -759,6 +759,19 @@ thread_db_free (struct process_info *proc) { #ifndef USE_LIBTHREAD_DB_DIRECTLY td_err_e (*td_ta_delete_p) (td_thragent_t *); + td_err_e (*td_ta_clear_event_p) (const td_thragent_t *ta, + td_thr_events_t *event); + + td_ta_clear_event_p = dlsym (thread_db->handle, "td_ta_clear_event"); + if (td_ta_clear_event_p != NULL) + { + td_thr_events_t events; + + /* Set the process wide mask saying we aren't interested in any + events anymore. */ + td_event_fillset (&events); + (*td_ta_clear_event_p) (thread_db->thread_agent, &events); + } td_ta_delete_p = dlsym (thread_db->handle, "td_ta_delete"); if (td_ta_delete_p != NULL) @@ -766,6 +779,10 @@ thread_db_free (struct process_info *proc) dlclose (thread_db->handle); #else + td_thd_events_t events; + + td_event_fillset (&events); + td_ta_clear_event (thread_db->thread_agent, &events); td_ta_delete (thread_db->thread_agent); #endif /* USE_LIBTHREAD_DB_DIRECTLY */ diff --git a/gdb/linux-thread-db.c b/gdb/linux-thread-db.c index ac6a4e58536..32ac5c5d6de 100644 --- a/gdb/linux-thread-db.c +++ b/gdb/linux-thread-db.c @@ -141,6 +141,8 @@ struct thread_db_info td_event_e event, td_notify_t *ptr); td_err_e (*td_ta_set_event_p) (const td_thragent_t *ta, td_thr_events_t *event); + td_err_e (*td_ta_clear_event_p) (const td_thragent_t *ta, + td_thr_events_t *event); td_err_e (*td_ta_event_getmsg_p) (const td_thragent_t *ta, td_event_msg_t *msg); @@ -701,6 +703,7 @@ try_thread_db_load_1 (struct thread_db_info *info) /* These are not essential. */ info->td_ta_event_addr_p = dlsym (info->handle, "td_ta_event_addr"); info->td_ta_set_event_p = dlsym (info->handle, "td_ta_set_event"); + info->td_ta_clear_event_p = dlsym (info->handle, "td_ta_clear_event"); info->td_ta_event_getmsg_p = dlsym (info->handle, "td_ta_event_getmsg"); info->td_thr_event_enable_p = dlsym (info->handle, "td_thr_event_enable"); info->td_thr_tls_get_addr_p = dlsym (info->handle, "td_thr_tls_get_addr"); @@ -907,14 +910,14 @@ thread_db_load (void) static void disable_thread_event_reporting (struct thread_db_info *info) { - if (info->td_ta_set_event_p != NULL) + if (info->td_ta_clear_event_p != NULL) { td_thr_events_t events; /* Set the process wide mask saying we aren't interested in any events anymore. */ - td_event_emptyset (&events); - info->td_ta_set_event_p (info->thread_agent, &events); + td_event_fillset (&events); + info->td_ta_clear_event_p (info->thread_agent, &events); } info->td_create_bp_addr = 0; -- 2.30.2