Denys Vlasenko 19cdada5b4 Do not detach when we think tracee is going to die.
Current code plays some ungodly tricks, trying to not detach
thread group leader until all threads exit.

Also, it detaches from a tracee when signal delivery is detected
which will cause tracee to exit.
This operation is racy (not to mention the determination
whether signal is set to SIG_DFL is a horrible hack):
after we determined that this signal is indeed fatal
but before we detach and let process die,
*other thread* may set a handler to this signal, and
we will leak the process, falsely displaying it as killed!

I need to look in the past to figure out why we even do it.
First guess is that it's a workaround for old kernel bugs:
kernel used to deliver exit notifications to the tracer,
not to real parent. These workarounds are ancient
(internal_exit is from 1995).

The patch deletes the hacks. We no longer need tcp->nclone_threads,
TCB_EXITING and TCB_GROUP_EXITING. We also lose a few rather
ugly functions.

I also added a new message: "+++ exited with EXITCODE +++"
which shows exact moment strace got exit notification.
It is analogous to existing "+++ killed by SIG +++" message.

* defs.h: Delete struct tcb::nclone_threads field,
  TCB_EXITING and TCB_GROUP_EXITING constants,
  declarations of sigishandled() and internal_exit().
* process.c (internal_exit): Delete this function.
  (handle_new_child): Don't ++tcp->nclone_threads.
* signal.c (parse_sigset_t): Delete this function.
  (sigishandled): Delete this function.
* strace.c (startup_attach): Don't tcbtab[tcbi]->nclone_threads++.
  (droptcb): Don't delay dropping if tcp->nclone_threads > 0,
  don't drop parent if its nclone_threads reached 0:
  just drop (only) this tcb unconditionally.
  (detach): don't drop parent.
  (handle_group_exit): Delete this function.
  (handle_ptrace_event): Instead of handle_group_exit, just drop tcb;
  do not panic if we see WIFEXITED from an attached pid;
  print "+++ exited with EXITCODE +++" for every WIFEXITED pid.
* syscall.c (internal_syscall):	Do not treat sys_exit specially -
  don't call internal_exit on it.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
2011-08-17 10:45:32 +02:00
2011-03-14 15:39:36 +00:00
2011-02-25 16:53:50 +00:00
2011-06-09 15:16:01 +00:00
2011-03-14 15:32:38 +00:00
2011-06-07 12:13:24 +02:00
2009-07-08 21:01:21 +00:00
2002-03-31 18:43:00 +00:00
2011-06-22 14:32:43 +02:00
2011-03-15 15:46:52 +00:00
2011-06-22 14:32:43 +02:00
2009-09-18 12:07:03 +00:00
2011-06-22 14:32:43 +02:00
2011-06-13 21:58:43 +00:00
2011-06-07 12:13:24 +02:00
2011-06-07 12:13:24 +02:00
2011-06-22 14:32:43 +02:00
2011-03-14 15:39:36 +00:00
1999-02-19 00:21:36 +00:00
2011-06-22 14:32:43 +02:00
2009-02-23 08:07:45 +00:00
2009-07-08 21:01:21 +00:00
1999-02-19 00:21:36 +00:00
2010-07-17 17:46:28 +02:00
2009-09-18 12:07:03 +00:00
2011-06-07 12:13:24 +02:00
2011-03-14 15:39:36 +00:00
2011-06-07 12:13:24 +02:00
2009-09-18 12:07:03 +00:00
2010-02-04 22:40:57 +00:00
2011-06-22 14:32:43 +02:00
2001-07-10 13:48:44 +00:00
1999-02-19 00:21:36 +00:00

This is strace 4.0, a system call tracer for SunOS 4.x, Linux, System
V release 4, Solaris 2.x and Irix 5.x.  strace is released under a
Berkeley-style license at the request of Paul Kranenburg; see the file
COPYRIGHT for details.

Read the INSTALL file for generic instructions on how to install
strace.  If configure cannot guess your system configuration, you can
specify it on the command line after the other options like this:

	./configure --prefix=/usr i486-linux

A single sunos4.1 binary should work on all the sun4, sun4c and sun4m
kernel architectures.  Let me know if sun4d doesn't work.  Other
i486-*-sysv4 systems may work with little or no tweaking.

See the file NEWS for information on what has changed in recent
versions.

See the file PORTING if you like strace but it doesn't work on an
operating system you use frequently.

See the file CREDITS to see who has contributed to strace.

See the file TODO if you feel like helping out.

You can get the latest version of strace from its homepage at
http://sourceforge.net/projects/strace/ .

Please send bug reports and enhancements to the strace
mailinglist at strace-devel@lists.sourceforge.net, or directly to
Wichert Akkerman <wakkerma@debian.org>
Description
No description provided
Readme 17 MiB
Languages
C 92.2%
Shell 3.4%
M4 1.4%
Makefile 0.8%
Roff 0.7%
Other 1.5%