Merge lp:~linuxjedi/drizzle/drizzle-bug-616870 into lp:~drizzle-trunk/drizzle/development

Proposed by Andrew Hutchings
Status: Merged
Approved by: Monty Taylor
Approved revision: 1703
Merged at revision: 1736
Proposed branch: lp:~linuxjedi/drizzle/drizzle-bug-616870
Merge into: lp:~drizzle-trunk/drizzle/development
Diff against target: 44 lines (+12/-0)
3 files modified
drizzled/module/loader.cc (+3/-0)
drizzled/module/registry.cc (+8/-0)
drizzled/module/registry.h (+1/-0)
To merge this branch: bzr merge lp:~linuxjedi/drizzle/drizzle-bug-616870
Reviewer Review Type Date Requested Status
Monty Taylor Approve
Review via email: mp+33968@code.launchpad.net

Description of the change

Remove module pointer from registry when module doesn't load to avoid a double-free on shutdown.

To post a comment you must log in.
Revision history for this message
Monty Taylor (mordred) wrote :

Excellent.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'drizzled/module/loader.cc'
2--- drizzled/module/loader.cc 2010-08-20 19:08:50 +0000
3+++ drizzled/module/loader.cc 2010-08-27 22:29:44 +0000
4@@ -451,7 +451,10 @@
5 plugin_initialize_vars(module);
6
7 if (plugin_initialize(registry, module))
8+ {
9+ registry.remove(module);
10 delete_module(module);
11+ }
12 }
13 }
14 }
15
16=== modified file 'drizzled/module/registry.cc'
17--- drizzled/module/registry.cc 2010-05-15 18:23:34 +0000
18+++ drizzled/module/registry.cc 2010-08-27 22:29:44 +0000
19@@ -91,6 +91,14 @@
20 module_map[add_str]= handle;
21 }
22
23+void module::Registry::remove(module::Module *handle)
24+{
25+ string remove_str(handle->getName());
26+ transform(remove_str.begin(), remove_str.end(),
27+ remove_str.begin(), ::tolower);
28+
29+ module_map.erase(remove_str);
30+}
31
32 vector<module::Module *> module::Registry::getList(bool active)
33 {
34
35=== modified file 'drizzled/module/registry.h'
36--- drizzled/module/registry.h 2010-05-15 18:23:34 +0000
37+++ drizzled/module/registry.h 2010-08-27 22:29:44 +0000
38@@ -70,6 +70,7 @@
39
40 void add(Module *module);
41
42+ void remove(Module *module);
43
44 std::vector<Module *> getList(bool active);
45