moduleapi: Have modules internally store a reference to shared tables they use, to ensure they don't get collected while any module that had access to that table is still loaded (thanks Zash)
authorMatthew Wild <mwild1@gmail.com>
Sat, 21 Apr 2012 22:52:15 +0100
changeset 4651 d1739d72100a
parent 4650 464ca74ddf6a
child 4652 9d24bc503621
moduleapi: Have modules internally store a reference to shared tables they use, to ensure they don't get collected while any module that had access to that table is still loaded (thanks Zash)
core/moduleapi.lua
--- a/core/moduleapi.lua	Sat Apr 21 22:50:57 2012 +0100
+++ b/core/moduleapi.lua	Sat Apr 21 22:52:15 2012 +0100
@@ -135,6 +135,7 @@
 -- Intentionally does not allow the table at a path to be _set_, it
 -- is auto-created if it does not exist.
 function api:shared(...)
+	if not self.shared_data then self.shared_data = {}; end
 	local paths = { n = select("#", ...), ... };
 	local data_array = {};
 	local default_path_components = { self.host, self.name };
@@ -150,6 +151,7 @@
 			shared_data[path] = shared;
 		end
 		t_insert(data_array, shared);
+		self.shared_data[path] = shared;
 	end
 	return unpack(data_array);
 end