Add __isThreadable libRS hack.
diff --git a/lib/bcc/CacheReader.cpp b/lib/bcc/CacheReader.cpp
index c017d36..14dd03e 100644
--- a/lib/bcc/CacheReader.cpp
+++ b/lib/bcc/CacheReader.cpp
@@ -84,17 +84,6 @@
//&& relocate()
;
-
- // TODO(logan): This is the hack for libRS. Should be turned on
- // before caching is ready to go.
-#if 0
- // Check the cache file has __isThreadable or not. If it is set,
- // then we have to call mpSymbolLookupFn for __clearThreadable.
- if (mpHeader->libRSThreadable && mpSymbolLookupFn) {
- mpSymbolLookupFn(mpSymbolLookupContext, "__clearThreadable");
- }
-#endif
-
return result ? mpResult.take() : NULL;
}
@@ -114,6 +103,12 @@
return false;
}
+ // Dirty hack for libRS.
+ // TODO(all): This should be removed in the future.
+ if (mpHeader->libRS_threadable) {
+ mpResult->mLibRSThreadable = true;
+ }
+
return true;
}
diff --git a/lib/bcc/Script.cpp b/lib/bcc/Script.cpp
index a59407b..d9faf02 100644
--- a/lib/bcc/Script.cpp
+++ b/lib/bcc/Script.cpp
@@ -212,6 +212,12 @@
mCached = cached;
mStatus = ScriptStatus::Cached;
+ // Dirty hack for libRS.
+ // TODO(all): This dirty hack should be removed in the future.
+ if (cached->isLibRSThreadable() && mpExtSymbolLookupFn) {
+ mpExtSymbolLookupFn(mpExtSymbolLookupFnContext, "__clearThreadable");
+ }
+
return 0;
}
diff --git a/lib/bcc/ScriptCached.h b/lib/bcc/ScriptCached.h
index 272e493..fed5740 100644
--- a/lib/bcc/ScriptCached.h
+++ b/lib/bcc/ScriptCached.h
@@ -61,10 +61,12 @@
OBCC_StringPool *mpStringPoolRaw;
std::vector<char const *> mStringPool;
+ bool mLibRSThreadable;
+
public:
ScriptCached(Script *owner)
: mpOwner(owner), mpExportVars(NULL), mpExportFuncs(NULL),
- mContext(NULL), mpStringPoolRaw(NULL) {
+ mContext(NULL), mpStringPoolRaw(NULL), mLibRSThreadable(false) {
}
~ScriptCached();
@@ -91,6 +93,12 @@
BCCvoid **base,
BCCsizei *length);
+ // Dirty hack for libRS.
+ // TODO(all): This should be removed in the future.
+ bool isLibRSThreadable() const {
+ return mLibRSThreadable;
+ }
+
#if 0
void registerSymbolCallback(BCCSymbolLookupFn pFn, BCCvoid *pContext) {
mCompiler.registerSymbolCallback(pFn, pContext);