diff options
-rw-r--r-- | Source/cmCPluginAPI.h | 2 | ||||
-rw-r--r-- | Source/cmLoadCommandCommand.cxx | 12 |
2 files changed, 13 insertions, 1 deletions
diff --git a/Source/cmCPluginAPI.h b/Source/cmCPluginAPI.h index f1ef9ba..d7ba6d4 100644 --- a/Source/cmCPluginAPI.h +++ b/Source/cmCPluginAPI.h @@ -176,6 +176,7 @@ Finally we define the key data structures and function prototypes typedef int (*CM_INITIAL_PASS_FUNCTION)(void *info, void *mf, int argc, char *[]); typedef void (*CM_FINAL_PASS_FUNCTION)(void *info, void *mf); + typedef void (*CM_DESTRUCTOR_FUNCTION)(void *info); typedef struct { unsigned char magic1; @@ -184,6 +185,7 @@ Finally we define the key data structures and function prototypes int m_Inherited; CM_INITIAL_PASS_FUNCTION InitialPass; CM_FINAL_PASS_FUNCTION FinalPass; + CM_DESTRUCTOR_FUNCTION Destructor; CM_DOC_FUNCTION GetTerseDocumentation; CM_DOC_FUNCTION GetFullDocumentation; void *ClientData; diff --git a/Source/cmLoadCommandCommand.cxx b/Source/cmLoadCommandCommand.cxx index 3c098f5..7dec12c 100644 --- a/Source/cmLoadCommandCommand.cxx +++ b/Source/cmLoadCommandCommand.cxx @@ -28,6 +28,9 @@ public: this->info.CAPI = &cmStaticCAPI; } + ///! clean up any memory allocated by the plugin + ~cmLoadedCommand(); + /** * This is a virtual constructor for the command. */ @@ -139,7 +142,14 @@ void cmLoadedCommand::FinalPass() { this->info.FinalPass((void *)&this->info,(void *)this->m_Makefile); } - +} + +cmLoadedCommand::~cmLoadedCommand() +{ + if (this->info.Destructor) + { + this->info.Destructor((void *)&this->info); + } } // cmLoadCommandCommand |