Fix strace -f -o '|command' hangup
* strace.c (main): Call test_ptrace_setoptions() before parsing
-o option, otherwise a forked command will cause a hangup inside
test_ptrace_setoptions().
diff --git a/strace.c b/strace.c
index fd12b34..e1ae8f1 100644
--- a/strace.c
+++ b/strace.c
@@ -945,6 +945,20 @@
run_gid = getgid();
}
+#ifdef LINUX
+ if (followfork) {
+ if (test_ptrace_setoptions() < 0) {
+ fprintf(stderr,
+ "Test for options supported by PTRACE_SETOPTIONS "
+ "failed, giving up using this feature.\n");
+ ptrace_setoptions = 0;
+ }
+ if (debug)
+ fprintf(stderr, "ptrace_setoptions = %#x\n",
+ ptrace_setoptions);
+ }
+#endif
+
/* Check if they want to redirect the output. */
if (outfname) {
/* See if they want to pipe the output. */
@@ -975,20 +989,6 @@
qflag = 1;
}
-#ifdef LINUX
- if (followfork) {
- if (test_ptrace_setoptions() < 0) {
- fprintf(stderr,
- "Test for options supported by PTRACE_SETOPTIONS "
- "failed, giving up using this feature.\n");
- ptrace_setoptions = 0;
- }
- if (debug)
- fprintf(stderr, "ptrace_setoptions = %#x\n",
- ptrace_setoptions);
- }
-#endif
-
/* Valid states here:
optind < argc pflag_seen outfname interactive
1 0 0 1