diff options
author | Adam <Adam@anope.org> | 2010-09-22 14:56:43 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2010-09-22 14:56:43 -0400 |
commit | 05e6815d912f0418f6da25a2106dd718796f02fa (patch) | |
tree | 40f7f54db2d6c69165b915a4a8f0ad9d9df36777 /include | |
parent | 34592069801b11d852b7f4d7cb1594e72058f8c3 (diff) |
Do not use new/delete to allocate modules, allows modules to always destruct properly and automatically
Diffstat (limited to 'include')
-rw-r--r-- | include/services.h | 25 |
1 files changed, 6 insertions, 19 deletions
diff --git a/include/services.h b/include/services.h index 9fd9b2ce3..947a8cc30 100644 --- a/include/services.h +++ b/include/services.h @@ -140,39 +140,26 @@ extern "C" void __pfnBkCheck() {} /** This definition is used as shorthand for the various classes * and functions needed to make a module loadable by the OS. - * It defines the class factory and external AnopeInit and AnopeFini functions. + * It defines the class factory and the external AnopeInit function. */ #ifdef _WIN32 # define MODULE_INIT(x) \ extern "C" DllExport Module *AnopeInit(const Anope::string &, const Anope::string &); \ extern "C" Module *AnopeInit(const Anope::string &modname, const Anope::string &creator) \ { \ - return new x(modname, creator); \ + static x module(modname, creator); \ + return &module; \ } \ - BOOLEAN WINAPI DllMain(HINSTANCE, DWORD nReason, LPVOID) \ + BOOLEAN WINAPI DllMain(HINSTANCE, DWORD, LPVOID) \ { \ - switch (nReason) \ - { \ - case DLL_PROCESS_ATTACH: \ - case DLL_PROCESS_DETACH: \ - break; \ - } \ return TRUE; \ - } \ - extern "C" DllExport void AnopeFini(x *); \ - extern "C" void AnopeFini(x *m) \ - { \ - delete m; \ } #else # define MODULE_INIT(x) \ extern "C" DllExport Module *AnopeInit(const Anope::string &modname, const Anope::string &creator) \ { \ - return new x(modname, creator); \ - } \ - extern "C" DllExport void AnopeFini(x *m) \ - { \ - delete m; \ + static x module(modname, creator); \ + return &module; \ } #endif |