wsanchez 99/05/03 16:06:06
Modified: src/os/unix os.c Log: Use macro "HAVE_DYLD" instead of "RHAPSODY" for dyld-specific code. Add macro "DYLD_CANT_UNLOAD" around workaround for dyld-unloading-is-a-noop. Revision Changes Path 1.16 +15 -8 apache-1.3/src/os/unix/os.c Index: os.c =================================================================== RCS file: /home/cvs/apache-1.3/src/os/unix/os.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- os.c 1998/09/16 06:49:44 1.15 +++ os.c 1999/05/03 23:06:05 1.16 @@ -26,8 +26,15 @@ * dynamic shared object (DSO) mechanism */ -#ifdef RHAPSODY +#ifdef HAVE_DYLD /* NeXT/Apple dynamic linker */ #include <mach-o/dyld.h> + +/* + * NSUnlinkModule() is a noop in old versions of dyld. + * Let's install an error handler to deal with "multiply defined + * symbol" runtime errors. + */ +#ifdef DYLD_CANT_UNLOAD #include "httpd.h" #include "http_log.h" @@ -49,7 +56,6 @@ * every time we reload a module. Workaround here is to just * rebind to the new symbol, and forget about the old one. * This is crummy, because it's basically a memory leak. - * (See Radar 2262020 against dyld). */ #ifdef DEBUG @@ -73,11 +79,12 @@ abort(); } -#endif /*RHAPSODY*/ +#endif /* DYLD_CANT_UNLOAD */ +#endif /* HAVE_DYLD */ void ap_os_dso_init(void) { -#if defined(RHAPSODY) +#if defined(HAVE_DYLD) && defined(DYLD_CANT_UNLOAD) NSLinkEditErrorHandlers handlers; handlers.undefined = undefined_symbol_handler; @@ -95,7 +102,7 @@ handle = shl_load(path, BIND_IMMEDIATE|BIND_VERBOSE|BIND_NOSTART, 0L); return (void *)handle; -#elif defined(RHAPSODY) +#elif defined(HAVE_DYLD) NSObjectFileImage image; if (NSCreateObjectFileImageFromFile(path, &image) != NSObjectFileImageSuccess) @@ -116,7 +123,7 @@ #if defined(HPUX) || defined(HPUX10) shl_unload((shl_t)handle); -#elif defined(RHAPSODY) +#elif defined(HAVE_DYLD) NSUnLinkModule(handle,FALSE); #else @@ -138,7 +145,7 @@ status = shl_findsym((shl_t *)&handle, symname, TYPE_DATA, &symaddr); return (status == -1 ? NULL : symaddr); -#elif defined(RHAPSODY) +#elif defined(HAVE_DYLD) NSSymbol symbol; char *symname2 = (char*)malloc(sizeof(char)*(strlen(symname)+2)); sprintf(symname2, "_%s", symname); @@ -163,7 +170,7 @@ { #if defined(HPUX) || defined(HPUX10) return strerror(errno); -#elif defined(RHAPSODY) +#elif defined(HAVE_DYLD) return NULL; #else return dlerror();