Avoid accessing TLS in rsClearObject()

Bug: 27874893
Bug: 27925095

rsClearObject() may be called on rsContextDestroy() in the JNI thread,
where TLS is not initialized.

This also reverted Icca50fade1199b6f530f963e9e694366b7d8cf67 that
made rsContextDestroy() go through the FIFO. rsContextDestroy() must
happen off the FIFO, since it joins the FIFO consuming thread.

Both the rsClearObject() change and the rsContextDestroy() revert need
to go together to make RenderScript and Camera CTS tests pass. Hence
this single CL for both changes.

Change-Id: I5f1d91a4cc1ce9bf2b3386fbef6f1171638b5266
(cherry picked from commit ade3137c22dd91694742145c2d5fe9d6bae17516)
diff --git a/cpu_ref/rsCpuExecutable.h b/cpu_ref/rsCpuExecutable.h
index 6e4d325..72c352c 100644
--- a/cpu_ref/rsCpuExecutable.h
+++ b/cpu_ref/rsCpuExecutable.h
@@ -62,8 +62,7 @@
 
 class ScriptExecutable {
 public:
-    ScriptExecutable(Context* RSContext,
-                     void** fieldAddress, bool* fieldIsObject,
+    ScriptExecutable(void** fieldAddress, bool* fieldIsObject,
                      const char* const * fieldName, size_t varCount,
                      InvokeFunc_t* invokeFunctions, size_t funcCount,
                      ForEachFunc_t* forEachFunctions, uint32_t* forEachSignatures,
@@ -87,8 +86,7 @@
         mPragmaCount(pragmaCount), mGlobalNames(globalNames),
         mGlobalAddresses(globalAddresses), mGlobalSizes(globalSizes),
         mGlobalProperties(globalProperties), mGlobalEntries(globalEntries),
-        mIsThreadable(isThreadable), mBuildChecksum(buildChecksum),
-        mRS(RSContext) {
+        mIsThreadable(isThreadable), mBuildChecksum(buildChecksum) {
     }
 
     ~ScriptExecutable() {
@@ -97,7 +95,7 @@
                 if (mFieldAddress[i] != nullptr) {
                     rs_object_base *obj_addr =
                             reinterpret_cast<rs_object_base *>(mFieldAddress[i]);
-                    rsrClearObject(mRS, obj_addr);
+                    rsrClearObject(obj_addr);
                 }
             }
         }
@@ -131,7 +129,7 @@
     // embedded in the shared object. A mismatch will cause a failure.
     // If succeeded, returns the new object. Otherwise, returns nullptr.
     static ScriptExecutable*
-            createFromSharedObject(Context* RSContext, void* sharedObj,
+            createFromSharedObject(void* sharedObj,
                                    uint32_t expectedChecksum = 0);
 
     size_t getExportedVariableCount() const { return mExportedVarCount; }
@@ -227,8 +225,6 @@
 
     bool mIsThreadable;
     uint32_t mBuildChecksum;
-
-    Context* mRS;
 };
 
 }  // namespace renderscript