Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > media > main-src > by-pkgid > b3bd92884018251b87f9099340c300c3 > files > 35

ltrace-0.5-13.45svn.el5_7.12.src.rpm

diff -urp ltrace-0.5-unpatched/ltrace.h ltrace-0.5/ltrace.h
--- ltrace-0.5-unpatched/ltrace.h	2008-09-02 09:45:39.000000000 -0400
+++ ltrace-0.5/ltrace.h	2008-09-02 11:00:35.000000000 -0400
@@ -173,6 +177,7 @@ extern void reinitialize_breakpoints(str
 
 extern struct process *open_program(char *filename, pid_t pid);
 extern void open_pid(pid_t pid, int verbose);
+extern void open_forked_pid(pid_t pid);
 extern void show_summary(void);
 
 /* Arch-dependent stuff: */
diff -urp ltrace-0.5-unpatched/proc.c ltrace-0.5/proc.c
--- ltrace-0.5-unpatched/proc.c	2008-09-02 09:45:39.000000000 -0400
+++ ltrace-0.5/proc.c	2008-09-03 09:07:25.000000000 -0400
@@ -58,3 +58,10 @@ void open_pid(pid_t pid, int verbose)
 	proc = open_program(filename, 0);
 	proc->pid = pid;
 }
+
+void open_forked_pid(pid_t pid)
+{
+	char *filename = pid2name(pid);
+	struct process *proc = open_program(filename, pid);
+	proc->breakpoints_enabled = -1;
+}
diff -urp ltrace-0.5-unpatched/testsuite/lib/ltrace.exp ltrace-0.5/testsuite/lib/ltrace.exp
--- ltrace-0.5-unpatched/testsuite/lib/ltrace.exp	2008-09-02 09:45:39.000000000 -0400
+++ ltrace-0.5/testsuite/lib/ltrace.exp	2008-09-02 11:00:35.000000000 -0400
@@ -260,7 +260,7 @@ proc ltrace_saveoutput { args } {
 proc ltrace_verify_output { file_to_search pattern {instance_no 0}} {
 
 	# compute the number of PATTERN in FILE_TO_SEARCH by grep and wc.
-	catch "exec sh -c {grep $pattern $file_to_search | wc -l ;exit}" output
+	catch "exec sh -c {egrep $pattern $file_to_search | wc -l ;exit}" output
 	verbose "output = $output"
 	
 	if { $instance_no == 0 } then {
diff -urp ltrace-0.5-unpatched/testsuite/ltrace.minor/trace-fork.exp ltrace-0.5/testsuite/ltrace.minor/trace-fork.exp
--- ltrace-0.5-unpatched/testsuite/ltrace.minor/trace-fork.exp	2008-09-02 09:45:39.000000000 -0400
+++ ltrace-0.5/testsuite/ltrace.minor/trace-fork.exp	2008-09-02 11:00:35.000000000 -0400
@@ -35,6 +35,19 @@ if [regexp {ELF from incompatible archit
 
 ltrace_saveoutput "${exec_output}" ${srcdir}/${subdir}/${testfile}.ltrace
 
-set pattern "fork"
+if [ regexp {Cannot attach} $exec_output ] {
+	fail "Couldn't attach to forked process!"
+	return
+}
+
+set pattern "^fork"
 ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
 
+set pattern {'^\[pid [0-9]*\][ \t]*(printf|puts)'}
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 2
+
+set pattern {'^\[pid [0-9]*\][ \t]*wait'}
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+
+set pattern {'^\[pid [0-9]*\][ \t]*sleep'}
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
diff -urp ltrace-0.5-unpatched/wait_for_something.c ltrace-0.5/wait_for_something.c
--- ltrace-0.5-unpatched/wait_for_something.c	2008-09-02 09:45:39.000000000 -0400
+++ ltrace-0.5/wait_for_something.c	2008-09-02 11:00:35.000000000 -0400
@@ -107,7 +107,8 @@ struct event *wait_for_something(void)
 		event.e_un.signum = WSTOPSIG(status);
 		child_pid = (pid_t) get_child_pid(event.proc->pid);
                 if (child_pid){
-			open_pid(child_pid,0);
+			debug (3, "fork: get_child_pid gave us %d", child_pid);
+			open_forked_pid(child_pid);
                 }
                 enable_all_breakpoints(event.proc);
 		continue_after_signal(event.proc->pid, event.e_un.signum);