This is the mail archive of the
gdb-patches@sourceware.cygnus.com
mailing list for the GDB project.
[GDB 4.18] sol-thread.c sol_detach_thread patch
- To: gdb-patches@sourceware.cygnus.com
- Subject: [GDB 4.18] sol-thread.c sol_detach_thread patch
- From: Neil Schellenberger <nschelle@crosskeys.com>
- Date: Tue, 15 Jun 1999 23:06:35 -0400 (EDT)
Hi folks,
I had been having trouble convincing gdb 4.17 (and later) to detach
from a multi-threaded process under Solaris 2.5.1. It seemed that gdb
always locked up as soon as the detach was executed. Killing the
debugger usually (always?) seemed to have the remedial effect of
forcing a detach via the run-on-close on the procfs.
I finally found some time to figure out what was happening. Seems
that when sol_thread_detach is called, if the inferior_pid is set to a
user thread id there will be serious grief printing the "detaching"
message. I won't bother with the details here.
The patch I provide below sets inferior_pid to the process pid before
continuing. I can't see any serious downside to losing the LWP
information, but someone who really understands this stuff should
decide if this is correct or not.
Of course, once I figured this all of this out, the workaround also
became obvious: switch to a LWP before detaching.
Tue Jun 15 22:32:25 1999 Neil Schellenberger <nschelle@crosskeys.com>
* sol-thread.c (sol_thread_detach): Reset inferior_pid so that it
is definitely not a thread or LWP id. The id is used by procfs
to_detach to generate the "detaching" message to the tty;
unfortunately it can get into an infinite loop inside
target_pid_to_str because solaris_pid_to_str cannot properly
decode user thread ids without the (just unpushed) sol_thread_ops
target. This also provides better symmetry with the
inferior_pid manipulation done in sol_thread_attach.
*** sol-thread.c.orig Tue Jun 15 22:05:31 1999
--- sol-thread.c Tue Jun 15 22:06:51 1999
*************** sol_thread_detach (args, from_tty)
*** 487,492 ****
--- 487,493 ----
char *args;
int from_tty;
{
+ inferior_pid = PIDGET (main_ph.pid);
unpush_target (&sol_thread_ops);
procfs_ops.to_detach (args, from_tty);
}
Regards,
Neil
--
Neil Schellenberger | Voice : (613) 599-2300 ext. 8445
CrossKeys Systems Corporation | Fax : (613) 599-2330
350 Terry Fox Drive | E-Mail: neil.schellenberger@crosskeys.com
Kanata, Ont., Canada, K2K 2W5 | URL : http://www.crosskeys.com/
"Bother", said the Borg, "we just assimilated Pooh."