[ltrace-commits] 02/02: Fix tracing multi-threaded processes without -f

Petr Machata pmachata-guest at moszumanska.debian.org
Wed Apr 8 11:19:47 UTC 2015


This is an automated email from the git hooks/post-receive script.

pmachata-guest pushed a commit to branch master
in repository ltrace.

commit 72ee29639c55b5942bc07c8ed0013005f8fc5a97
Author: Petr Machata <pmachata at redhat.com>
Date:   Wed Apr 8 07:14:10 2015 -0400

    Fix tracing multi-threaded processes without -f
    
    - In handle_syscall, we avoid touching stack of ignored processes.
      But in handle_sysret, we require a sysret-like stack entry even
      for ignored processes, even though we then go ahead to not act
      on that stack entry.  Instead, for ignored processes, avoid looking
      at stack trace at all.
---
 handle_event.c                          | 10 +++++-----
 testsuite/ltrace.main/main-threaded.exp |  1 +
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/handle_event.c b/handle_event.c
index 6fa7e98..c2550ad 100644
--- a/handle_event.c
+++ b/handle_event.c
@@ -619,12 +619,12 @@ handle_x_sysret(Event *event, char *(*name_cb)(struct process *, int))
 	debug(DEBUG_FUNCTION, "handle_x_sysret(pid=%d, sysnum=%d)",
 	      event->proc->pid, event->e_un.sysnum);
 
-	unsigned d = event->proc->callstack_depth;
-	assert(d > 0);
-	struct callstack_element *elem = &event->proc->callstack[d - 1];
-	assert(elem->is_syscall);
-
 	if (event->proc->state != STATE_IGNORED) {
+		unsigned d = event->proc->callstack_depth;
+		assert(d > 0);
+		struct callstack_element *elem = &event->proc->callstack[d - 1];
+		assert(elem->is_syscall);
+
 		struct timedelta spent = calc_time_spent(elem->enter_time);
 		if (options.syscalls)
 			output_syscall_right(event->proc,
diff --git a/testsuite/ltrace.main/main-threaded.exp b/testsuite/ltrace.main/main-threaded.exp
index cead82d..aca7afd 100644
--- a/testsuite/ltrace.main/main-threaded.exp
+++ b/testsuite/ltrace.main/main-threaded.exp
@@ -60,5 +60,6 @@ set bin [ltraceCompile {} $libprint -lpthread [ltraceSource c {
 }]]
 
 ltraceMatch1 [ltraceRun -f -l libprint.so -- $bin] {print\(} == 30
+ltraceMatch1 [ltraceRun -L -- $bin] exited == 1
 
 ltraceDone

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/collab-maint/ltrace.git



More information about the ltrace-commits mailing list