summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Goodliffe <randomdan@akira.random.lan>2014-12-01 16:36:13 +0000
committerDan Goodliffe <randomdan@akira.random.lan>2014-12-01 16:36:13 +0000
commita0a756b788cad647a0b8a4c29fd23b11d0bc2d29 (patch)
treeb44822fc4d8b551e80b140ccb6046af378f530de
parentDon't cache a pointer to the row state instance, it might move! (diff)
downloadproject2-a0a756b788cad647a0b8a4c29fd23b11d0bc2d29.tar.bz2
project2-a0a756b788cad647a0b8a4c29fd23b11d0bc2d29.tar.xz
project2-a0a756b788cad647a0b8a4c29fd23b11d0bc2d29.zip
Clear script caches before libraries are unloaded
-rw-r--r--project2/basics/options/preload.cpp2
-rw-r--r--project2/common/scripts.cpp6
-rw-r--r--project2/common/scripts.h1
-rw-r--r--project2/ice/iceDaemon.cpp2
-rw-r--r--project2/ice/iceDataSource.cpp2
5 files changed, 13 insertions, 0 deletions
diff --git a/project2/basics/options/preload.cpp b/project2/basics/options/preload.cpp
index 006391d..b3c126e 100644
--- a/project2/basics/options/preload.cpp
+++ b/project2/basics/options/preload.cpp
@@ -1,6 +1,7 @@
#include <pch.hpp>
#include <options.h>
#include <library.h>
+#include <scripts.h>
#include <boost/filesystem/path.hpp>
#include <map>
#include <dlfcn.h>
@@ -41,6 +42,7 @@ class Preload {
static void UnloadLibraries()
{
+ ScriptReader::clearCache();
libs.clear();
}
diff --git a/project2/common/scripts.cpp b/project2/common/scripts.cpp
index 2b52db5..8801841 100644
--- a/project2/common/scripts.cpp
+++ b/project2/common/scripts.cpp
@@ -67,6 +67,12 @@ ScriptReader::load(const CommonObjects * co, bool childrenOnly) const
loader.collectAll(co, childrenOnly, root());
}
+void
+ScriptReader::clearCache()
+{
+ scriptCache.clear();
+}
+
ScriptReaderPtr
ScriptReader::resolveScript(const std::string & group, const std::string & name, bool ii)
{
diff --git a/project2/common/scripts.h b/project2/common/scripts.h
index 7d43a01..775a080 100644
--- a/project2/common/scripts.h
+++ b/project2/common/scripts.h
@@ -73,6 +73,7 @@ class ScriptReader : public virtual IntrusivePtrBase {
mutable LoaderBase loader;
static ScriptReaderPtr resolveScript(const std::string & group, const std::string & name, bool ii);
+ static void clearCache();
friend class SourceObject;
mutable std::map<std::string, SourceObject *> namedComponents;
diff --git a/project2/ice/iceDaemon.cpp b/project2/ice/iceDaemon.cpp
index 7f506d4..b9211f9 100644
--- a/project2/ice/iceDaemon.cpp
+++ b/project2/ice/iceDaemon.cpp
@@ -3,6 +3,7 @@
#include "buildComms.h"
#include "buildDaemon.h"
#include "iceViewSerializer.h"
+#include <scripts.h>
#include <scriptLoader.h>
#include <options.h>
#include <sys/stat.h>
@@ -180,6 +181,7 @@ IceDaemon::GetComponentCompiler(const std::string & slice, const IceCompile::Dep
void
IceDaemon::ClearSlice()
{
+ ScriptReader::clearCache();
libs.clear();
}
diff --git a/project2/ice/iceDataSource.cpp b/project2/ice/iceDataSource.cpp
index c3d5b36..1b0c9e8 100644
--- a/project2/ice/iceDataSource.cpp
+++ b/project2/ice/iceDataSource.cpp
@@ -1,6 +1,7 @@
#include <pch.hpp>
#include "buildClient.h"
#include "iceDataSource.h"
+#include <scripts.h>
#include <Ice/Ice.h>
IceBase::Libs IceDataSource::libs;
@@ -33,6 +34,7 @@ IceDataSource::GetComponentCompiler(const std::string & slice, const IceCompile:
void
IceDataSource::ClearSlice()
{
+ ScriptReader::clearCache();
libs.clear();
proxies.clear();
}