dgaudet 98/01/21 14:14:20
Modified: src CHANGES src/main http_main.c Log: Add GPROF define to fine tune profiling... and to make it work period under linux. Reviewed by: Jim Jagielski Revision Changes Path 1.578 +4 -0 apachen/src/CHANGES Index: CHANGES =================================================================== RCS file: /export/home/cvs/apachen/src/CHANGES,v retrieving revision 1.577 retrieving revision 1.578 diff -u -r1.577 -r1.578 --- CHANGES 1998/01/21 22:10:59 1.577 +++ CHANGES 1998/01/21 22:14:11 1.578 @@ -1,5 +1,9 @@ Changes with Apache 1.3b4 + *) Defining GPROF will disable profiling in the parent and enable it + in the children. If you're profiling under Linux this is pretty much + necessary because SIGPROF is lost across a fork(). [Dean Gaudet] + *) htdigest and htpasswd needed slight tweaks to work on OS/2 and WIN32. [Brian Havard] 1.269 +22 -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.268 retrieving revision 1.269 diff -u -r1.268 -r1.269 --- http_main.c 1998/01/13 23:11:11 1.268 +++ http_main.c 1998/01/21 22:14:14 1.269 @@ -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; @@ -3201,6 +3215,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. @@ -3396,8 +3411,12 @@ is_graceful = 0; ++generation; - if (!one_process) + if (!one_process) { detach(); + } + else { + MONCONTROL(1); + } my_pid = getpid(); @@ -3607,6 +3626,8 @@ int main(int argc, char *argv[]) { int c; + + MONCONTROL(0); #ifdef AUX (void) set42sig();