Skip to content

Commit 162ccfb

Browse files
lordgamezfgerlits
authored andcommitted
MINIFICPP-2732 Clear class descriptions when extensions are cleared
Signed-off-by: Ferenc Gerlits <fgerlits@gmail.com> Closes #2121
1 parent 30fa5d1 commit 162ccfb

File tree

4 files changed

+18
-0
lines changed

4 files changed

+18
-0
lines changed

libminifi/include/core/extension/ExtensionManager.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ namespace org::apache::nifi::minifi::core::extension {
3030
class ExtensionManager {
3131
public:
3232
explicit ExtensionManager(const std::shared_ptr<Configure>& config);
33+
~ExtensionManager();
34+
35+
ExtensionManager(const ExtensionManager&) = delete;
36+
ExtensionManager& operator=(const ExtensionManager&) = delete;
37+
ExtensionManager(ExtensionManager&&) = delete;
38+
ExtensionManager& operator=(ExtensionManager&&) = delete;
3339

3440
private:
3541
std::vector<std::unique_ptr<Extension>> extensions_;

libminifi/src/agent/agent_docs.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,8 @@ std::map<BundleIdentifier, Components>& ClassDescriptionRegistry::getMutableClas
3434
return getAgentDocsClassMappings();
3535
}
3636

37+
void ClassDescriptionRegistry::clearClassDescriptions() {
38+
getAgentDocsClassMappings().clear();
39+
}
3740

3841
} // namespace org::apache::nifi::minifi

libminifi/src/core/extension/ExtensionManager.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
#include "core/logging/LoggerConfiguration.h"
2323
#include "core/extension/Extension.h"
24+
#include "minifi-cpp/agent/agent_docs.h"
2425
#include "utils/file/FilePattern.h"
2526
#include "minifi-cpp/agent/agent_version.h"
2627
#include "core/extension/Utils.h"
@@ -86,4 +87,11 @@ ExtensionManager::ExtensionManager(const std::shared_ptr<Configure>& config): lo
8687
}
8788
}
8889

90+
ExtensionManager::~ExtensionManager() {
91+
// Clear the class description registry to avoid dangling pointers
92+
// to validator objects that live in extension DLLs to be unloaded.
93+
minifi::ClassDescriptionRegistry::clearClassDescriptions();
94+
extensions_.clear();
95+
}
96+
8997
} // namespace org::apache::nifi::minifi::core::extension

minifi-api/include/minifi-cpp/agent/agent_docs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ class ClassDescriptionRegistry {
7373
public:
7474
static const std::map<minifi::BundleIdentifier, Components>& getClassDescriptions();
7575
static std::map<minifi::BundleIdentifier, Components>& getMutableClassDescriptions();
76+
static void clearClassDescriptions();
7677

7778
template<typename Class, ResourceType Type>
7879
static void createClassDescription(std::string bundle_name, std::string class_name, std::string version);

0 commit comments

Comments
 (0)