it appears that the mp dso was being unloaded before the cleanups were
complete, causing a crash in cleanup_sv - ONLY when running as a
service. still not sure why this happens, but this patch at least
eliminates the crash. i believe this is only called before the process
comes down (nt service restart seems to bring the process down), so it
shouldn't really leak.
--- mod_perl.c_bk Fri Oct 20 12:03:22 2000
+++ mod_perl.c Fri Oct 20 12:58:52 2000
@@ -507,8 +507,20 @@
static void mp_dso_unload(void *data)
{
-
- array_header *librefs = xs_dl_librefs((pool *)data);
+ array_header *librefs;
+#ifdef WIN32
+ // This is here to stop a crash when bringing down
+ // a service. Apparently the dso is unloaded too early.
+ // This if statement tests to see if we are running as a
+ // service. apache does the same
+ // see apache's isProcessService() in service.c
+ if (AllocConsole())
+ {
+ FreeConsole();
+ return;
+ }
+#endif
+ librefs = xs_dl_librefs((pool *)data);
perl_shutdown(NULL, NULL);
unload_xs_so(librefs);