diff options
author | android-build-team Robot | 2018-04-10 02:25:32 -0500 |
---|---|---|
committer | android-build-team Robot | 2018-04-10 02:25:32 -0500 |
commit | 862b4d93fb2009a6e81a5cfd5e1041eae2510fc4 (patch) | |
tree | b343f4b66d3f2efdc3d3b3773e4b1c74389d7ee8 | |
parent | ebb05da501b44f78c2a19f44db242ee853f13525 (diff) | |
parent | 78677442cb54ccd1fd15564c2ce16e57d7286a1d (diff) | |
download | platform-hardware-interfaces-862b4d93fb2009a6e81a5cfd5e1041eae2510fc4.tar.gz platform-hardware-interfaces-862b4d93fb2009a6e81a5cfd5e1041eae2510fc4.tar.xz platform-hardware-interfaces-862b4d93fb2009a6e81a5cfd5e1041eae2510fc4.zip |
Snap for 4710485 from 78677442cb54ccd1fd15564c2ce16e57d7286a1d to pi-release
Change-Id: Ia874166e3286c4bf81bc01fb3ac431816d4ecd35
-rw-r--r-- | camera/device/3.2/default/CameraDeviceSession.cpp | 5 | ||||
-rw-r--r-- | cas/1.0/default/CasImpl.cpp | 82 | ||||
-rw-r--r-- | cas/1.0/default/CasImpl.h | 2 | ||||
-rw-r--r-- | cas/1.0/default/DescramblerImpl.cpp | 46 | ||||
-rw-r--r-- | cas/1.0/default/DescramblerImpl.h | 2 | ||||
-rw-r--r-- | configstore/1.0/default/seccomp_policy/configstore@1.0-arm64.policy | 1 | ||||
-rw-r--r-- | current.txt | 2 | ||||
-rw-r--r-- | neuralnetworks/1.0/types.hal | 2 |
8 files changed, 80 insertions, 62 deletions
diff --git a/camera/device/3.2/default/CameraDeviceSession.cpp b/camera/device/3.2/default/CameraDeviceSession.cpp index 5f89cde9..60a57cde 100644 --- a/camera/device/3.2/default/CameraDeviceSession.cpp +++ b/camera/device/3.2/default/CameraDeviceSession.cpp | |||
@@ -645,7 +645,10 @@ void CameraDeviceSession::ResultBatcher::invokeProcessCaptureResultCallback( | |||
645 | result.fmqResultSize = result.result.size(); | 645 | result.fmqResultSize = result.result.size(); |
646 | result.result.resize(0); | 646 | result.result.resize(0); |
647 | } else { | 647 | } else { |
648 | ALOGW("%s: couldn't utilize fmq, fall back to hwbinder", __FUNCTION__); | 648 | ALOGW("%s: couldn't utilize fmq, fall back to hwbinder, result size: %zu," |
649 | "shared message queue available size: %zu", | ||
650 | __FUNCTION__, result.result.size(), | ||
651 | mResultMetadataQueue->availableToWrite()); | ||
649 | result.fmqResultSize = 0; | 652 | result.fmqResultSize = 0; |
650 | } | 653 | } |
651 | } | 654 | } |
diff --git a/cas/1.0/default/CasImpl.cpp b/cas/1.0/default/CasImpl.cpp index 2ac1c4f6..178020e4 100644 --- a/cas/1.0/default/CasImpl.cpp +++ b/cas/1.0/default/CasImpl.cpp | |||
@@ -31,19 +31,8 @@ namespace cas { | |||
31 | namespace V1_0 { | 31 | namespace V1_0 { |
32 | namespace implementation { | 32 | namespace implementation { |
33 | 33 | ||
34 | struct CasImpl::PluginHolder : public RefBase { | ||
35 | public: | ||
36 | explicit PluginHolder(CasPlugin *plugin) : mPlugin(plugin) {} | ||
37 | ~PluginHolder() { if (mPlugin != NULL) delete mPlugin; } | ||
38 | CasPlugin* get() { return mPlugin; } | ||
39 | |||
40 | private: | ||
41 | CasPlugin *mPlugin; | ||
42 | DISALLOW_EVIL_CONSTRUCTORS(PluginHolder); | ||
43 | }; | ||
44 | |||
45 | CasImpl::CasImpl(const sp<ICasListener> &listener) | 34 | CasImpl::CasImpl(const sp<ICasListener> &listener) |
46 | : mPluginHolder(NULL), mListener(listener) { | 35 | : mListener(listener) { |
47 | ALOGV("CTOR"); | 36 | ALOGV("CTOR"); |
48 | } | 37 | } |
49 | 38 | ||
@@ -69,7 +58,8 @@ void CasImpl::OnEvent( | |||
69 | 58 | ||
70 | void CasImpl::init(const sp<SharedLibrary>& library, CasPlugin *plugin) { | 59 | void CasImpl::init(const sp<SharedLibrary>& library, CasPlugin *plugin) { |
71 | mLibrary = library; | 60 | mLibrary = library; |
72 | mPluginHolder = new PluginHolder(plugin); | 61 | std::shared_ptr<CasPlugin> holder(plugin); |
62 | std::atomic_store(&mPluginHolder, holder); | ||
73 | } | 63 | } |
74 | 64 | ||
75 | void CasImpl::onEvent( | 65 | void CasImpl::onEvent( |
@@ -88,22 +78,22 @@ void CasImpl::onEvent( | |||
88 | 78 | ||
89 | Return<Status> CasImpl::setPrivateData(const HidlCasData& pvtData) { | 79 | Return<Status> CasImpl::setPrivateData(const HidlCasData& pvtData) { |
90 | ALOGV("%s", __FUNCTION__); | 80 | ALOGV("%s", __FUNCTION__); |
91 | sp<PluginHolder> holder = mPluginHolder; | 81 | std::shared_ptr<CasPlugin> holder = std::atomic_load(&mPluginHolder); |
92 | if (holder == NULL) { | 82 | if (holder.get() == nullptr) { |
93 | return toStatus(INVALID_OPERATION); | 83 | return toStatus(INVALID_OPERATION); |
94 | } | 84 | } |
95 | return toStatus(holder->get()->setPrivateData(pvtData)); | 85 | return toStatus(holder->setPrivateData(pvtData)); |
96 | } | 86 | } |
97 | 87 | ||
98 | Return<void> CasImpl::openSession(openSession_cb _hidl_cb) { | 88 | Return<void> CasImpl::openSession(openSession_cb _hidl_cb) { |
99 | ALOGV("%s", __FUNCTION__); | 89 | ALOGV("%s", __FUNCTION__); |
100 | CasSessionId sessionId; | 90 | CasSessionId sessionId; |
101 | 91 | ||
102 | sp<PluginHolder> holder = mPluginHolder; | 92 | std::shared_ptr<CasPlugin> holder = std::atomic_load(&mPluginHolder); |
103 | status_t err = INVALID_OPERATION; | 93 | status_t err = INVALID_OPERATION; |
104 | if (holder != NULL) { | 94 | if (holder.get() != nullptr) { |
105 | err = holder->get()->openSession(&sessionId); | 95 | err = holder->openSession(&sessionId); |
106 | holder.clear(); | 96 | holder.reset(); |
107 | } | 97 | } |
108 | 98 | ||
109 | _hidl_cb(toStatus(err), sessionId); | 99 | _hidl_cb(toStatus(err), sessionId); |
@@ -115,87 +105,87 @@ Return<Status> CasImpl::setSessionPrivateData( | |||
115 | const HidlCasSessionId &sessionId, const HidlCasData& pvtData) { | 105 | const HidlCasSessionId &sessionId, const HidlCasData& pvtData) { |
116 | ALOGV("%s: sessionId=%s", __FUNCTION__, | 106 | ALOGV("%s: sessionId=%s", __FUNCTION__, |
117 | sessionIdToString(sessionId).string()); | 107 | sessionIdToString(sessionId).string()); |
118 | sp<PluginHolder> holder = mPluginHolder; | 108 | std::shared_ptr<CasPlugin> holder = std::atomic_load(&mPluginHolder); |
119 | if (holder == NULL) { | 109 | if (holder.get() == nullptr) { |
120 | return toStatus(INVALID_OPERATION); | 110 | return toStatus(INVALID_OPERATION); |
121 | } | 111 | } |
122 | return toStatus( | 112 | return toStatus(holder->setSessionPrivateData(sessionId, pvtData)); |
123 | holder->get()->setSessionPrivateData( | ||
124 | sessionId, pvtData)); | ||
125 | } | 113 | } |
126 | 114 | ||
127 | Return<Status> CasImpl::closeSession(const HidlCasSessionId &sessionId) { | 115 | Return<Status> CasImpl::closeSession(const HidlCasSessionId &sessionId) { |
128 | ALOGV("%s: sessionId=%s", __FUNCTION__, | 116 | ALOGV("%s: sessionId=%s", __FUNCTION__, |
129 | sessionIdToString(sessionId).string()); | 117 | sessionIdToString(sessionId).string()); |
130 | sp<PluginHolder> holder = mPluginHolder; | 118 | std::shared_ptr<CasPlugin> holder = std::atomic_load(&mPluginHolder); |
131 | if (holder == NULL) { | 119 | if (holder.get() == nullptr) { |
132 | return toStatus(INVALID_OPERATION); | 120 | return toStatus(INVALID_OPERATION); |
133 | } | 121 | } |
134 | return toStatus(holder->get()->closeSession(sessionId)); | 122 | return toStatus(holder->closeSession(sessionId)); |
135 | } | 123 | } |
136 | 124 | ||
137 | Return<Status> CasImpl::processEcm( | 125 | Return<Status> CasImpl::processEcm( |
138 | const HidlCasSessionId &sessionId, const HidlCasData& ecm) { | 126 | const HidlCasSessionId &sessionId, const HidlCasData& ecm) { |
139 | ALOGV("%s: sessionId=%s", __FUNCTION__, | 127 | ALOGV("%s: sessionId=%s", __FUNCTION__, |
140 | sessionIdToString(sessionId).string()); | 128 | sessionIdToString(sessionId).string()); |
141 | sp<PluginHolder> holder = mPluginHolder; | 129 | std::shared_ptr<CasPlugin> holder = std::atomic_load(&mPluginHolder); |
142 | if (holder == NULL) { | 130 | if (holder.get() == nullptr) { |
143 | return toStatus(INVALID_OPERATION); | 131 | return toStatus(INVALID_OPERATION); |
144 | } | 132 | } |
145 | 133 | ||
146 | return toStatus(holder->get()->processEcm(sessionId, ecm)); | 134 | return toStatus(holder->processEcm(sessionId, ecm)); |
147 | } | 135 | } |
148 | 136 | ||
149 | Return<Status> CasImpl::processEmm(const HidlCasData& emm) { | 137 | Return<Status> CasImpl::processEmm(const HidlCasData& emm) { |
150 | ALOGV("%s", __FUNCTION__); | 138 | ALOGV("%s", __FUNCTION__); |
151 | sp<PluginHolder> holder = mPluginHolder; | 139 | std::shared_ptr<CasPlugin> holder = std::atomic_load(&mPluginHolder); |
152 | if (holder == NULL) { | 140 | if (holder.get() == nullptr) { |
153 | return toStatus(INVALID_OPERATION); | 141 | return toStatus(INVALID_OPERATION); |
154 | } | 142 | } |
155 | 143 | ||
156 | return toStatus(holder->get()->processEmm(emm)); | 144 | return toStatus(holder->processEmm(emm)); |
157 | } | 145 | } |
158 | 146 | ||
159 | Return<Status> CasImpl::sendEvent( | 147 | Return<Status> CasImpl::sendEvent( |
160 | int32_t event, int32_t arg, | 148 | int32_t event, int32_t arg, |
161 | const HidlCasData& eventData) { | 149 | const HidlCasData& eventData) { |
162 | ALOGV("%s", __FUNCTION__); | 150 | ALOGV("%s", __FUNCTION__); |
163 | sp<PluginHolder> holder = mPluginHolder; | 151 | std::shared_ptr<CasPlugin> holder = std::atomic_load(&mPluginHolder); |
164 | if (holder == NULL) { | 152 | if (holder.get() == nullptr) { |
165 | return toStatus(INVALID_OPERATION); | 153 | return toStatus(INVALID_OPERATION); |
166 | } | 154 | } |
167 | 155 | ||
168 | status_t err = holder->get()->sendEvent(event, arg, eventData); | 156 | status_t err = holder->sendEvent(event, arg, eventData); |
169 | return toStatus(err); | 157 | return toStatus(err); |
170 | } | 158 | } |
171 | 159 | ||
172 | Return<Status> CasImpl::provision(const hidl_string& provisionString) { | 160 | Return<Status> CasImpl::provision(const hidl_string& provisionString) { |
173 | ALOGV("%s: provisionString=%s", __FUNCTION__, provisionString.c_str()); | 161 | ALOGV("%s: provisionString=%s", __FUNCTION__, provisionString.c_str()); |
174 | sp<PluginHolder> holder = mPluginHolder; | 162 | std::shared_ptr<CasPlugin> holder = std::atomic_load(&mPluginHolder); |
175 | if (holder == NULL) { | 163 | if (holder.get() == nullptr) { |
176 | return toStatus(INVALID_OPERATION); | 164 | return toStatus(INVALID_OPERATION); |
177 | } | 165 | } |
178 | 166 | ||
179 | return toStatus(holder->get()->provision(String8(provisionString.c_str()))); | 167 | return toStatus(holder->provision(String8(provisionString.c_str()))); |
180 | } | 168 | } |
181 | 169 | ||
182 | Return<Status> CasImpl::refreshEntitlements( | 170 | Return<Status> CasImpl::refreshEntitlements( |
183 | int32_t refreshType, | 171 | int32_t refreshType, |
184 | const HidlCasData& refreshData) { | 172 | const HidlCasData& refreshData) { |
185 | ALOGV("%s", __FUNCTION__); | 173 | ALOGV("%s", __FUNCTION__); |
186 | sp<PluginHolder> holder = mPluginHolder; | 174 | std::shared_ptr<CasPlugin> holder = std::atomic_load(&mPluginHolder); |
187 | if (holder == NULL) { | 175 | if (holder.get() == nullptr) { |
188 | return toStatus(INVALID_OPERATION); | 176 | return toStatus(INVALID_OPERATION); |
189 | } | 177 | } |
190 | 178 | ||
191 | status_t err = holder->get()->refreshEntitlements(refreshType, refreshData); | 179 | status_t err = holder->refreshEntitlements(refreshType, refreshData); |
192 | return toStatus(err); | 180 | return toStatus(err); |
193 | } | 181 | } |
194 | 182 | ||
195 | Return<Status> CasImpl::release() { | 183 | Return<Status> CasImpl::release() { |
196 | ALOGV("%s: plugin=%p", __FUNCTION__, | 184 | ALOGV("%s: plugin=%p", __FUNCTION__, mPluginHolder.get()); |
197 | mPluginHolder != NULL ? mPluginHolder->get() : NULL); | 185 | |
198 | mPluginHolder.clear(); | 186 | std::shared_ptr<CasPlugin> holder(nullptr); |
187 | std::atomic_store(&mPluginHolder, holder); | ||
188 | |||
199 | return Status::OK; | 189 | return Status::OK; |
200 | } | 190 | } |
201 | 191 | ||
diff --git a/cas/1.0/default/CasImpl.h b/cas/1.0/default/CasImpl.h index 841d64e0..d7928381 100644 --- a/cas/1.0/default/CasImpl.h +++ b/cas/1.0/default/CasImpl.h | |||
@@ -88,7 +88,7 @@ public: | |||
88 | private: | 88 | private: |
89 | struct PluginHolder; | 89 | struct PluginHolder; |
90 | sp<SharedLibrary> mLibrary; | 90 | sp<SharedLibrary> mLibrary; |
91 | sp<PluginHolder> mPluginHolder; | 91 | std::shared_ptr<CasPlugin> mPluginHolder; |
92 | sp<ICasListener> mListener; | 92 | sp<ICasListener> mListener; |
93 | 93 | ||
94 | DISALLOW_EVIL_CONSTRUCTORS(CasImpl); | 94 | DISALLOW_EVIL_CONSTRUCTORS(CasImpl); |
diff --git a/cas/1.0/default/DescramblerImpl.cpp b/cas/1.0/default/DescramblerImpl.cpp index 36699baf..1f899337 100644 --- a/cas/1.0/default/DescramblerImpl.cpp +++ b/cas/1.0/default/DescramblerImpl.cpp | |||
@@ -50,12 +50,12 @@ CHECK_SUBSAMPLE_DEF(CryptoPlugin); | |||
50 | 50 | ||
51 | DescramblerImpl::DescramblerImpl( | 51 | DescramblerImpl::DescramblerImpl( |
52 | const sp<SharedLibrary>& library, DescramblerPlugin *plugin) : | 52 | const sp<SharedLibrary>& library, DescramblerPlugin *plugin) : |
53 | mLibrary(library), mPlugin(plugin) { | 53 | mLibrary(library), mPluginHolder(plugin) { |
54 | ALOGV("CTOR: mPlugin=%p", mPlugin); | 54 | ALOGV("CTOR: plugin=%p", mPluginHolder.get()); |
55 | } | 55 | } |
56 | 56 | ||
57 | DescramblerImpl::~DescramblerImpl() { | 57 | DescramblerImpl::~DescramblerImpl() { |
58 | ALOGV("DTOR: mPlugin=%p", mPlugin); | 58 | ALOGV("DTOR: plugin=%p", mPluginHolder.get()); |
59 | release(); | 59 | release(); |
60 | } | 60 | } |
61 | 61 | ||
@@ -63,12 +63,22 @@ Return<Status> DescramblerImpl::setMediaCasSession(const HidlCasSessionId& sessi | |||
63 | ALOGV("%s: sessionId=%s", __FUNCTION__, | 63 | ALOGV("%s: sessionId=%s", __FUNCTION__, |
64 | sessionIdToString(sessionId).string()); | 64 | sessionIdToString(sessionId).string()); |
65 | 65 | ||
66 | return toStatus(mPlugin->setMediaCasSession(sessionId)); | 66 | std::shared_ptr<DescramblerPlugin> holder = std::atomic_load(&mPluginHolder); |
67 | if (holder.get() == nullptr) { | ||
68 | return toStatus(INVALID_OPERATION); | ||
69 | } | ||
70 | |||
71 | return toStatus(holder->setMediaCasSession(sessionId)); | ||
67 | } | 72 | } |
68 | 73 | ||
69 | Return<bool> DescramblerImpl::requiresSecureDecoderComponent( | 74 | Return<bool> DescramblerImpl::requiresSecureDecoderComponent( |
70 | const hidl_string& mime) { | 75 | const hidl_string& mime) { |
71 | return mPlugin->requiresSecureDecoderComponent(String8(mime.c_str())); | 76 | std::shared_ptr<DescramblerPlugin> holder = std::atomic_load(&mPluginHolder); |
77 | if (holder.get() == nullptr) { | ||
78 | return false; | ||
79 | } | ||
80 | |||
81 | return holder->requiresSecureDecoderComponent(String8(mime.c_str())); | ||
72 | } | 82 | } |
73 | 83 | ||
74 | static inline bool validateRangeForSize( | 84 | static inline bool validateRangeForSize( |
@@ -86,12 +96,23 @@ Return<void> DescramblerImpl::descramble( | |||
86 | descramble_cb _hidl_cb) { | 96 | descramble_cb _hidl_cb) { |
87 | ALOGV("%s", __FUNCTION__); | 97 | ALOGV("%s", __FUNCTION__); |
88 | 98 | ||
99 | // Get a local copy of the shared_ptr for the plugin. Note that before | ||
100 | // calling the HIDL callback, this shared_ptr must be manually reset, | ||
101 | // since the client side could proceed as soon as the callback is called | ||
102 | // without waiting for this method to go out of scope. | ||
103 | std::shared_ptr<DescramblerPlugin> holder = std::atomic_load(&mPluginHolder); | ||
104 | if (holder.get() == nullptr) { | ||
105 | _hidl_cb(toStatus(INVALID_OPERATION), 0, NULL); | ||
106 | return Void(); | ||
107 | } | ||
108 | |||
89 | sp<IMemory> srcMem = mapMemory(srcBuffer.heapBase); | 109 | sp<IMemory> srcMem = mapMemory(srcBuffer.heapBase); |
90 | 110 | ||
91 | // Validate if the offset and size in the SharedBuffer is consistent with the | 111 | // Validate if the offset and size in the SharedBuffer is consistent with the |
92 | // mapped ashmem, since the offset and size is controlled by client. | 112 | // mapped ashmem, since the offset and size is controlled by client. |
93 | if (srcMem == NULL) { | 113 | if (srcMem == NULL) { |
94 | ALOGE("Failed to map src buffer."); | 114 | ALOGE("Failed to map src buffer."); |
115 | holder.reset(); | ||
95 | _hidl_cb(toStatus(BAD_VALUE), 0, NULL); | 116 | _hidl_cb(toStatus(BAD_VALUE), 0, NULL); |
96 | return Void(); | 117 | return Void(); |
97 | } | 118 | } |
@@ -100,6 +121,7 @@ Return<void> DescramblerImpl::descramble( | |||
100 | ALOGE("Invalid src buffer range: offset %llu, size %llu, srcMem size %llu", | 121 | ALOGE("Invalid src buffer range: offset %llu, size %llu, srcMem size %llu", |
101 | srcBuffer.offset, srcBuffer.size, (uint64_t)srcMem->getSize()); | 122 | srcBuffer.offset, srcBuffer.size, (uint64_t)srcMem->getSize()); |
102 | android_errorWriteLog(0x534e4554, "67962232"); | 123 | android_errorWriteLog(0x534e4554, "67962232"); |
124 | holder.reset(); | ||
103 | _hidl_cb(toStatus(BAD_VALUE), 0, NULL); | 125 | _hidl_cb(toStatus(BAD_VALUE), 0, NULL); |
104 | return Void(); | 126 | return Void(); |
105 | } | 127 | } |
@@ -117,6 +139,7 @@ Return<void> DescramblerImpl::descramble( | |||
117 | "srcOffset %llu, totalBytesInSubSamples %llu, srcBuffer size %llu", | 139 | "srcOffset %llu, totalBytesInSubSamples %llu, srcBuffer size %llu", |
118 | srcOffset, totalBytesInSubSamples, srcBuffer.size); | 140 | srcOffset, totalBytesInSubSamples, srcBuffer.size); |
119 | android_errorWriteLog(0x534e4554, "67962232"); | 141 | android_errorWriteLog(0x534e4554, "67962232"); |
142 | holder.reset(); | ||
120 | _hidl_cb(toStatus(BAD_VALUE), 0, NULL); | 143 | _hidl_cb(toStatus(BAD_VALUE), 0, NULL); |
121 | return Void(); | 144 | return Void(); |
122 | } | 145 | } |
@@ -135,6 +158,7 @@ Return<void> DescramblerImpl::descramble( | |||
135 | "dstOffset %llu, totalBytesInSubSamples %llu, srcBuffer size %llu", | 158 | "dstOffset %llu, totalBytesInSubSamples %llu, srcBuffer size %llu", |
136 | dstOffset, totalBytesInSubSamples, srcBuffer.size); | 159 | dstOffset, totalBytesInSubSamples, srcBuffer.size); |
137 | android_errorWriteLog(0x534e4554, "67962232"); | 160 | android_errorWriteLog(0x534e4554, "67962232"); |
161 | holder.reset(); | ||
138 | _hidl_cb(toStatus(BAD_VALUE), 0, NULL); | 162 | _hidl_cb(toStatus(BAD_VALUE), 0, NULL); |
139 | return Void(); | 163 | return Void(); |
140 | } | 164 | } |
@@ -146,7 +170,7 @@ Return<void> DescramblerImpl::descramble( | |||
146 | // Casting hidl SubSample to DescramblerPlugin::SubSample, but need | 170 | // Casting hidl SubSample to DescramblerPlugin::SubSample, but need |
147 | // to ensure structs are actually idential | 171 | // to ensure structs are actually idential |
148 | 172 | ||
149 | int32_t result = mPlugin->descramble( | 173 | int32_t result = holder->descramble( |
150 | dstBuffer.type != BufferType::SHARED_MEMORY, | 174 | dstBuffer.type != BufferType::SHARED_MEMORY, |
151 | (DescramblerPlugin::ScramblingControl)scramblingControl, | 175 | (DescramblerPlugin::ScramblingControl)scramblingControl, |
152 | subSamples.size(), | 176 | subSamples.size(), |
@@ -157,17 +181,17 @@ Return<void> DescramblerImpl::descramble( | |||
157 | dstOffset, | 181 | dstOffset, |
158 | NULL); | 182 | NULL); |
159 | 183 | ||
184 | holder.reset(); | ||
160 | _hidl_cb(toStatus(result >= 0 ? OK : result), result, NULL); | 185 | _hidl_cb(toStatus(result >= 0 ? OK : result), result, NULL); |
161 | return Void(); | 186 | return Void(); |
162 | } | 187 | } |
163 | 188 | ||
164 | Return<Status> DescramblerImpl::release() { | 189 | Return<Status> DescramblerImpl::release() { |
165 | ALOGV("%s: mPlugin=%p", __FUNCTION__, mPlugin); | 190 | ALOGV("%s: plugin=%p", __FUNCTION__, mPluginHolder.get()); |
191 | |||
192 | std::shared_ptr<DescramblerPlugin> holder(nullptr); | ||
193 | std::atomic_store(&mPluginHolder, holder); | ||
166 | 194 | ||
167 | if (mPlugin != NULL) { | ||
168 | delete mPlugin; | ||
169 | mPlugin = NULL; | ||
170 | } | ||
171 | return Status::OK; | 195 | return Status::OK; |
172 | } | 196 | } |
173 | 197 | ||
diff --git a/cas/1.0/default/DescramblerImpl.h b/cas/1.0/default/DescramblerImpl.h index d3b146ec..305f1154 100644 --- a/cas/1.0/default/DescramblerImpl.h +++ b/cas/1.0/default/DescramblerImpl.h | |||
@@ -55,7 +55,7 @@ public: | |||
55 | 55 | ||
56 | private: | 56 | private: |
57 | sp<SharedLibrary> mLibrary; | 57 | sp<SharedLibrary> mLibrary; |
58 | DescramblerPlugin *mPlugin; | 58 | std::shared_ptr<DescramblerPlugin> mPluginHolder; |
59 | 59 | ||
60 | DISALLOW_EVIL_CONSTRUCTORS(DescramblerImpl); | 60 | DISALLOW_EVIL_CONSTRUCTORS(DescramblerImpl); |
61 | }; | 61 | }; |
diff --git a/configstore/1.0/default/seccomp_policy/configstore@1.0-arm64.policy b/configstore/1.0/default/seccomp_policy/configstore@1.0-arm64.policy index f2dd8922..d523a1a7 100644 --- a/configstore/1.0/default/seccomp_policy/configstore@1.0-arm64.policy +++ b/configstore/1.0/default/seccomp_policy/configstore@1.0-arm64.policy | |||
@@ -42,6 +42,7 @@ exit_group: 1 | |||
42 | rt_sigreturn: 1 | 42 | rt_sigreturn: 1 |
43 | getrlimit: 1 | 43 | getrlimit: 1 |
44 | madvise: 1 | 44 | madvise: 1 |
45 | getdents64: 1 | ||
45 | clock_gettime: 1 | 46 | clock_gettime: 1 |
46 | 47 | ||
47 | # used during process crash by crash_dump to dump process info | 48 | # used during process crash by crash_dump to dump process info |
diff --git a/current.txt b/current.txt index 5aa62591..0d792720 100644 --- a/current.txt +++ b/current.txt | |||
@@ -258,7 +258,7 @@ cf72ff5a52bfa4d08e9e1000cf3ab5952a2d280c7f13cdad5ab7905c08050766 android.hardwar | |||
258 | fb92e2b40f8e9d494e8fd3b4ac18499a3216342e7cff160714c3bbf3660b6e79 android.hardware.gnss@1.0::IGnssConfiguration | 258 | fb92e2b40f8e9d494e8fd3b4ac18499a3216342e7cff160714c3bbf3660b6e79 android.hardware.gnss@1.0::IGnssConfiguration |
259 | 251594ea9b27447bfa005ebd806e58fb0ae4aad84a69938129c9800ec0c64eda android.hardware.gnss@1.0::IGnssMeasurementCallback | 259 | 251594ea9b27447bfa005ebd806e58fb0ae4aad84a69938129c9800ec0c64eda android.hardware.gnss@1.0::IGnssMeasurementCallback |
260 | 4e7169919d24fbe5573e5bcd683d0bd7abf553a4e6c34c41f9dfc1e12050db07 android.hardware.gnss@1.0::IGnssNavigationMessageCallback | 260 | 4e7169919d24fbe5573e5bcd683d0bd7abf553a4e6c34c41f9dfc1e12050db07 android.hardware.gnss@1.0::IGnssNavigationMessageCallback |
261 | 08ae9fc24f21f809e9b8501dfbc803662fcd6a8d8e1fb71d9dd7c0c4c6f5d556 android.hardware.neuralnetworks@1.0::types | 261 | 1488db5ffb8a7979488d1084761aab8bca2f59bc9a02d75cdefc296afeaf591b android.hardware.neuralnetworks@1.0::types |
262 | d4840db8efabdf1e4b344fc981cd36e5fe81a39aff6e199f6d06c1c8da413efd android.hardware.radio@1.0::types | 262 | d4840db8efabdf1e4b344fc981cd36e5fe81a39aff6e199f6d06c1c8da413efd android.hardware.radio@1.0::types |
263 | b280c4704dfcc548a9bf127b59b7c3578f460c50cce70a06b66fe0df8b27cff0 android.hardware.wifi@1.0::types | 263 | b280c4704dfcc548a9bf127b59b7c3578f460c50cce70a06b66fe0df8b27cff0 android.hardware.wifi@1.0::types |
264 | 264 | ||
diff --git a/neuralnetworks/1.0/types.hal b/neuralnetworks/1.0/types.hal index c97a00be..a9c91cd4 100644 --- a/neuralnetworks/1.0/types.hal +++ b/neuralnetworks/1.0/types.hal | |||
@@ -44,7 +44,7 @@ enum OperandType : int32_t { | |||
44 | * | 44 | * |
45 | * Attached to this tensor are two numbers that can be used to convert the | 45 | * Attached to this tensor are two numbers that can be used to convert the |
46 | * 8 bit integer to the real value and vice versa. These two numbers are: | 46 | * 8 bit integer to the real value and vice versa. These two numbers are: |
47 | * - scale: a 32 bit floating point value | 47 | * - scale: a 32 bit floating point value greater than zero |
48 | * - zero_value: a 32 bit integer | 48 | * - zero_value: a 32 bit integer |
49 | * | 49 | * |
50 | * The formula is: | 50 | * The formula is: |