Version 0.2.9

* Bug#20616 wasn't completely fixed; it didn't work with some programs (Fixed)
* Stopping ltrace with ^C DIDN'T WORK if -p option is not used!!  (Fixed)
* Option -f caused program to segfault; fixed
* Fixed nasty bug about executing set[ug]id binaries:
  When executing a program fails, don't left the program STOPPED.
* Make ltrace work with all setuid and setgid binaries when invoked as root
diff --git a/process_event.c b/process_event.c
index c4a3b1f..e5ca870 100644
--- a/process_event.c
+++ b/process_event.c
@@ -2,6 +2,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
+#include <signal.h>
 
 #include "ltrace.h"
 #include "output.h"
@@ -90,15 +91,23 @@
 	}
 }
 
+static void remove_proc(struct process * proc);
+
 static void process_signal(struct event * event)
 {
+	if (exiting && event->e_un.signum == SIGSTOP) {
+		pid_t pid = event->proc->pid;
+		disable_all_breakpoints(event->proc);
+		untrace_pid(pid);
+		remove_proc(event->proc);
+		continue_after_signal(pid, event->e_un.signum);
+		return;
+	}
 	output_line(event->proc, "--- %s (%s) ---",
 		shortsignal(event->e_un.signum), strsignal(event->e_un.signum));
 	continue_after_signal(event->proc->pid, event->e_un.signum);
 }
 
-static void remove_proc(struct process * proc);
-
 static void process_exit(struct event * event)
 {
 	output_line(event->proc, "+++ exited (status %d) +++",
@@ -117,6 +126,10 @@
 {
 	struct process *tmp, *tmp2;
 
+	if (opt_d) {
+		output_line(0,"Removing pid %u\n", proc->pid);
+	}
+
 	if (list_of_processes == proc) {
 		tmp = list_of_processes;
 		list_of_processes = list_of_processes->next;
@@ -129,6 +142,7 @@
 			tmp2 = tmp->next;
 			tmp->next = tmp->next->next;
 			free(tmp2);
+			continue;
 		}
 		tmp = tmp->next;
 	}