You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Dean Gaudet <dg...@arctic.org> on 1998/01/11 13:01:55 UTC

[PATCH] MONCONTROL

There's a comment near the top of the patch. 

Dean

Index: main/http_main.c
===================================================================
RCS file: /export/home/cvs/apachen/src/main/http_main.c,v
retrieving revision 1.263
diff -u -r1.263 http_main.c
--- http_main.c	1998/01/07 16:46:06	1.263
+++ http_main.c	1998/01/11 11:49:51
@@ -167,6 +167,20 @@
 
 DEF_Explain
 
+/* Defining GPROF when compiling uses the moncontrol() function to
+ * disable gprof profiling in the parent, and enable it only for
+ * request processing in children (or in one_process mode).  It's
+ * absolutely required to get useful gprof results under linux
+ * because the profile itimers and such are disabled across a
+ * fork().  It's probably useful elsewhere as well.
+ */
+#ifdef GPROF
+extern void moncontrol(int);
+#define MONCONTROL(x) moncontrol(x)
+#else
+#define MONCONTROL(x)
+#endif
+
 #ifndef MULTITHREAD
 /* this just need to be anything non-NULL */
 void *dummy_mutex = &dummy_mutex;
@@ -3181,6 +3195,7 @@
 
     if (!pid) {
 	RAISE_SIGSTOP(MAKE_CHILD);
+	MONCONTROL(1);
 	/* 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.
@@ -3376,8 +3391,12 @@
     is_graceful = 0;
     ++generation;
 
-    if (!one_process)
+    if (!one_process) {
 	detach();
+    }
+    else {
+	MONCONTROL(1);
+    }
 
     my_pid = getpid();
 
@@ -3587,6 +3606,8 @@
 int main(int argc, char *argv[])
 {
     int c;
+
+    MONCONTROL(0);
 
 #ifdef AUX
     (void) set42sig();