Blame SOURCES/ltrace-0.7.91-multithread-no-f-2.patch

39d69a
From 72ee29639c55b5942bc07c8ed0013005f8fc5a97 Mon Sep 17 00:00:00 2001
39d69a
From: Petr Machata <pmachata@redhat.com>
39d69a
Date: Wed, 8 Apr 2015 07:14:10 -0400
39d69a
Subject: [PATCH 2/2] Fix tracing multi-threaded processes without -f
39d69a
39d69a
- In handle_syscall, we avoid touching stack of ignored processes.
39d69a
  But in handle_sysret, we require a sysret-like stack entry even
39d69a
  for ignored processes, even though we then go ahead to not act
39d69a
  on that stack entry.  Instead, for ignored processes, avoid looking
39d69a
  at stack trace at all.
39d69a
---
39d69a
 handle_event.c                          | 10 +++++-----
39d69a
 testsuite/ltrace.main/main-threaded.exp |  1 +
39d69a
 2 files changed, 6 insertions(+), 5 deletions(-)
39d69a
39d69a
diff --git a/handle_event.c b/handle_event.c
39d69a
index 6fa7e98..c2550ad 100644
39d69a
--- a/handle_event.c
39d69a
+++ b/handle_event.c
39d69a
@@ -619,12 +619,12 @@ handle_x_sysret(Event *event, char *(*name_cb)(struct process *, int))
39d69a
 	debug(DEBUG_FUNCTION, "handle_x_sysret(pid=%d, sysnum=%d)",
39d69a
 	      event->proc->pid, event->e_un.sysnum);
39d69a
 
39d69a
-	unsigned d = event->proc->callstack_depth;
39d69a
-	assert(d > 0);
39d69a
-	struct callstack_element *elem = &event->proc->callstack[d - 1];
39d69a
-	assert(elem->is_syscall);
39d69a
-
39d69a
 	if (event->proc->state != STATE_IGNORED) {
39d69a
+		unsigned d = event->proc->callstack_depth;
39d69a
+		assert(d > 0);
39d69a
+		struct callstack_element *elem = &event->proc->callstack[d - 1];
39d69a
+		assert(elem->is_syscall);
39d69a
+
39d69a
 		struct timedelta spent = calc_time_spent(elem->enter_time);
39d69a
 		if (options.syscalls)
39d69a
 			output_syscall_right(event->proc,
39d69a
diff --git a/testsuite/ltrace.main/main-threaded.exp b/testsuite/ltrace.main/main-threaded.exp
39d69a
index cead82d..aca7afd 100644
39d69a
--- a/testsuite/ltrace.main/main-threaded.exp
39d69a
+++ b/testsuite/ltrace.main/main-threaded.exp
39d69a
@@ -60,5 +60,6 @@ set bin [ltraceCompile {} $libprint -lpthread [ltraceSource c {
39d69a
 }]]
39d69a
 
39d69a
 ltraceMatch1 [ltraceRun -f -l libprint.so -- $bin] {print\(} == 30
39d69a
+ltraceMatch1 [ltraceRun -L -- $bin] exited == 1
39d69a
 
39d69a
 ltraceDone
39d69a
-- 
39d69a
2.1.0