summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2010-09-22 14:56:43 -0400
committerAdam <Adam@anope.org>2010-09-22 14:56:43 -0400
commit05e6815d912f0418f6da25a2106dd718796f02fa (patch)
tree40f7f54db2d6c69165b915a4a8f0ad9d9df36777 /include
parent34592069801b11d852b7f4d7cb1594e72058f8c3 (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.h25
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