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);