diff options
author | Yang Ni <yangni@google.com> | 2015-05-11 19:40:38 -0700 |
---|---|---|
committer | Yang Ni <yangni@google.com> | 2015-05-12 17:38:54 +0000 |
commit | 99bd4a4614d03e02bb4e07db15c7af5a736211a0 (patch) | |
tree | beaa5608d8ec1f68e58d5aa4662d56c90709e61a | |
parent | 021ec27cb60dabf1926e53d6d0127029b8e19d55 (diff) | |
download | android_frameworks_rs-99bd4a4614d03e02bb4e07db15c7af5a736211a0.tar.gz android_frameworks_rs-99bd4a4614d03e02bb4e07db15c7af5a736211a0.tar.bz2 android_frameworks_rs-99bd4a4614d03e02bb4e07db15c7af5a736211a0.zip |
Fixed CTS failure
b/21040553
ScriptGroupTest.Builder2InvokeToKernelDependency failed.
Needs a copy of the FieldPacker object for invoke parameters, which
was passed in as a copy by JNI and released after the closure is
created.
Change-Id: I092fe029394ed898dc66e5ecdbbd86c416abe46b
-rw-r--r-- | rsClosure.cpp | 5 | ||||
-rw-r--r-- | rsClosure.h | 2 |
2 files changed, 5 insertions, 2 deletions
diff --git a/rsClosure.cpp b/rsClosure.cpp index 4b57be4d..85bf052f 100644 --- a/rsClosure.cpp +++ b/rsClosure.cpp @@ -113,7 +113,9 @@ Closure::Closure(Context* context, const ScriptInvokeID* invokeID, const void** values, const int* sizes) : ObjectBase(context), mContext(context), mFunctionID((IDBase*)invokeID), mIsKernel(false), mArgs(nullptr), mNumArg(0), - mReturnValue(nullptr), mParams(params), mParamLength(paramLength) { + mReturnValue(nullptr), mParamLength(paramLength) { + mParams = new uint8_t[mParamLength]; + memcpy(mParams, params, mParamLength); for (size_t i = 0; i < numValues; i++) { mGlobals[fieldIDs[i]] = make_pair(values[i], sizes[i]); } @@ -134,6 +136,7 @@ Closure::~Closure() { } delete[] mArgs; + delete[] mParams; } void Closure::setArg(const uint32_t index, const void* value, const size_t size) { diff --git a/rsClosure.h b/rsClosure.h index ad44821c..6847fad9 100644 --- a/rsClosure.h +++ b/rsClosure.h @@ -75,7 +75,7 @@ class Closure : public ObjectBase { Map<const Closure*, Map<const ScriptFieldID*, ObjectBaseRef<ScriptFieldID>>*> mGlobalDeps; - const void* mParams; + uint8_t* mParams; const size_t mParamLength; }; |