dgaudet 97/11/06 13:54:15
Modified: src/main alloc.c http_log.c http_main.c httpd.h
src/modules/standard mod_cgi.c
Log:
Commit the RAISE_SIGSTOP debugging support.
Reviewed by: Jim Jagielski, Martin Kraemer
Revision Changes Path
1.57 +1 -0 apachen/src/main/alloc.c
Index: alloc.c
===================================================================
RCS file: /export/home/cvs/apachen/src/main/alloc.c,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -r1.56 -r1.57
--- alloc.c 1997/11/01 21:13:20 1.56
+++ alloc.c 1997/11/06 21:54:07 1.57
@@ -1361,6 +1361,7 @@
if (!pid) {
/* Child process */
+ RAISE_SIGSTOP(SPAWN_CHILD);
if (pipe_out) {
close(out_fds[0]);
1.43 +1 -0 apachen/src/main/http_log.c
Index: http_log.c
===================================================================
RCS file: /export/home/cvs/apachen/src/main/http_log.c,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -r1.42 -r1.43
--- http_log.c 1997/10/27 19:09:43 1.42
+++ http_log.c 1997/11/06 21:54:08 1.43
@@ -413,6 +413,7 @@
/* XXX: need to check what open fds the logger is actually passed,
* XXX: and CGIs for that matter ... cleanup_for_exec *should*
* XXX: close all the relevant stuff, but hey, it could be broken. */
+ RAISE_SIGSTOP(PIPED_LOG_SPAWN);
/* we're now in the child */
close (STDIN_FILENO);
dup2 (pl->fds[0], STDIN_FILENO);
1.246 +12 -1 apachen/src/main/http_main.c
Index: http_main.c
===================================================================
RCS file: /export/home/cvs/apachen/src/main/http_main.c,v
retrieving revision 1.245
retrieving revision 1.246
diff -u -r1.245 -r1.246
--- http_main.c 1997/11/06 10:47:01 1.245
+++ http_main.c 1997/11/06 21:54:10 1.246
@@ -223,6 +223,10 @@
int one_process = 0;
+#ifdef DEBUG_SIGSTOP
+int raise_sigstop_flags;
+#endif
+
#ifndef NO_OTHER_CHILD
/* used to maintain list of children which aren't part of the scoreboard */
typedef struct other_child_rec other_child_rec;
@@ -2144,6 +2148,7 @@
fprintf(stderr, "httpd: unable to fork new process\n");
exit(1);
}
+ RAISE_SIGSTOP(DETACH);
#endif
#ifndef NO_SETSID
if ((pgrp = setsid()) == -1) {
@@ -2983,6 +2988,7 @@
}
if (!pid) {
+ RAISE_SIGSTOP(MAKE_CHILD);
/* Disable the restart signal handlers and enable the just_die stuff.
* Note that since restart() just notes that a restart has been
* requested there's no race condition here.
@@ -3424,7 +3430,7 @@
setup_prelinked_modules();
- while ((c = getopt(argc, argv, "Xd:f:vhl")) != -1) {
+ while ((c = getopt(argc, argv, "Xd:f:vhlZ:")) != -1) {
switch (c) {
case 'd':
strncpy(server_root, optarg, sizeof(server_root) - 1);
@@ -3446,6 +3452,11 @@
case 'X':
++one_process; /* Weird debugging mode. */
break;
+#ifdef DEBUG_SIGSTOP
+ case 'Z':
+ raise_sigstop_flags = atoi(optarg);
+ break;
+#endif
case '?':
usage(argv[0]);
}
1.166 +20 -0 apachen/src/main/httpd.h
Index: httpd.h
===================================================================
RCS file: /export/home/cvs/apachen/src/main/httpd.h,v
retrieving revision 1.165
retrieving revision 1.166
diff -u -r1.165 -r1.166
--- httpd.h 1997/10/26 21:57:13 1.165
+++ httpd.h 1997/11/06 21:54:11 1.166
@@ -903,3 +903,23 @@
#if !defined (MULTITHREAD) && (defined (HAVE_MMAP) || defined (HAVE_SHMGET))
#define OPTIMIZE_TIMEOUTS
#endif
+
+/* A set of flags which indicate places where the server should
raise(SIGSTOP).
+ * This is useful for debugging, because you can then attach to that process
+ * with gdb and continue. This is important in cases where one_process
+ * debugging isn't possible.
+ */
+#define SIGSTOP_DETACH 1
+#define SIGSTOP_MAKE_CHILD 2
+#define SIGSTOP_SPAWN_CHILD 4
+#define SIGSTOP_PIPED_LOG_SPAWN 8
+#define SIGSTOP_CGI_CHILD 16
+
+#ifdef DEBUG_SIGSTOP
+extern int raise_sigstop_flags;
+#define RAISE_SIGSTOP(x) do { \
+ if (raise_sigstop_flags & SIGSTOP_##x) raise(SIGSTOP);\
+ } while (0)
+#else
+#define RAISE_SIGSTOP(x)
+#endif
1.63 +1 -0 apachen/src/modules/standard/mod_cgi.c
Index: mod_cgi.c
===================================================================
RCS file: /export/home/cvs/apachen/src/modules/standard/mod_cgi.c,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -r1.62 -r1.63
--- mod_cgi.c 1997/10/25 22:35:18 1.62
+++ mod_cgi.c 1997/11/06 21:54:14 1.63
@@ -294,6 +294,7 @@
char **env;
+ RAISE_SIGSTOP(CGI_CHILD);
#ifdef DEBUG_CGI
fprintf(dbg, "Attempting to exec %s as %sCGI child (argv0 = %s)\n",
r->filename, nph ? "NPH " : "", argv0);