diff options
| author | Brian Potchik <brian@vector35.com> | 2018-08-10 13:56:34 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2018-08-10 13:56:34 -0400 |
| commit | 6ef32157e767aacd142012206bcf79c48266da2a (patch) | |
| tree | 49963df2faa2c38201ac8d7694a366bc3080c389 | |
| parent | 06a10105c9dd2512859597b848251f9c32037125 (diff) | |
Fix DownloadProvider reference counting and instance cleanup.
| -rw-r--r-- | binaryninjaapi.h | 2 | ||||
| -rw-r--r-- | downloadprovider.cpp | 7 |
2 files changed, 9 insertions, 0 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 147a49fb..a11bef1c 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -3669,6 +3669,7 @@ namespace BinaryNinja protected: DownloadInstance(DownloadProvider* provider); DownloadInstance(BNDownloadInstance* instance); + virtual ~DownloadInstance(); static void DestroyInstanceCallback(void* ctxt); static int PerformRequestCallback(void* ctxt, const char* url); @@ -3688,6 +3689,7 @@ namespace BinaryNinja { public: CoreDownloadInstance(BNDownloadInstance* instance); + virtual ~CoreDownloadInstance() {}; virtual int PerformRequest(const std::string& url) override; }; diff --git a/downloadprovider.cpp b/downloadprovider.cpp index 0e3483df..436e2516 100644 --- a/downloadprovider.cpp +++ b/downloadprovider.cpp @@ -10,6 +10,7 @@ DownloadInstance::DownloadInstance(DownloadProvider* provider) cb.context = this; cb.destroyInstance = DestroyInstanceCallback; cb.performRequest = PerformRequestCallback; + AddRefForRegistration(); m_object = BNInitDownloadInstance(provider->GetObject(), &cb); } @@ -20,6 +21,12 @@ DownloadInstance::DownloadInstance(BNDownloadInstance* instance) } +DownloadInstance::~DownloadInstance() +{ + BNFreeDownloadInstance(m_object); +} + + void DownloadInstance::DestroyInstanceCallback(void* ctxt) { DownloadInstance* instance = (DownloadInstance*)ctxt; |
