Skip to content

Commit 9e00a51

Browse files
authored
Add unload method to module
Differential Revision: D79184972 Pull Request resolved: #12984
1 parent 553482f commit 9e00a51

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

extension/module/module.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,17 @@ class Module {
194194
return load_method(method_name, nullptr, event_tracer);
195195
}
196196

197+
/**
198+
* Unload a specific method from the program.
199+
*
200+
* @param[in] method_name The name of the method to unload.
201+
*
202+
* @returns True if the method is unloaded, false if no-op.
203+
*/
204+
inline bool unload_method(const std::string& method_name) {
205+
return methods_.erase(method_name);
206+
}
207+
197208
/**
198209
* Get a method by it's name. Not recommended to use this method directly as
199210
* an end user. It's exposed to allow for composability of module in apis that
@@ -228,6 +239,15 @@ class Module {
228239
return load_forward(nullptr, event_tracer);
229240
}
230241

242+
/**
243+
* Unload the 'forward' method from the program.
244+
*
245+
* @returns True if the 'forward' method is unloaded, false if no-op.
246+
*/
247+
inline bool unload_forward() {
248+
return unload_method("forward");
249+
}
250+
231251
/**
232252
* Checks if a specific method is loaded.
233253
*

extension/module/test/module_test.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,25 @@ TEST_F(ModuleTest, TestLoadMethod) {
9191
EXPECT_TRUE(module.is_loaded());
9292
}
9393

94+
TEST_F(ModuleTest, TestUnloadMethod) {
95+
Module module(model_path_);
96+
97+
EXPECT_FALSE(module.is_method_loaded("forward"));
98+
const auto errorLoad = module.load_method("forward");
99+
EXPECT_EQ(errorLoad, Error::Ok);
100+
EXPECT_TRUE(module.is_method_loaded("forward"));
101+
// Unload method
102+
EXPECT_TRUE(module.unload_method("forward"));
103+
EXPECT_FALSE(module.is_method_loaded("forward"));
104+
// Try unload method again
105+
EXPECT_FALSE(module.unload_method("forward"));
106+
// Load method again
107+
const auto errorReload = module.load_method("forward");
108+
EXPECT_EQ(errorReload, Error::Ok);
109+
EXPECT_TRUE(module.is_method_loaded("forward"));
110+
EXPECT_TRUE(module.is_loaded());
111+
}
112+
94113
TEST_F(ModuleTest, TestLoadNonExistentMethod) {
95114
Module module(model_path_);
96115

0 commit comments

Comments
 (0)