@@ -160,11 +160,12 @@ void BpBinder::ObjectManager::kill()
160160
161161// ---------------------------------------------------------------------------
162162
163- sp<BpBinder> BpBinder::create (int32_t handle) {
163+ sp<BpBinder> BpBinder::create (int32_t handle, std::function< void ()>* postTask ) {
164164 if constexpr (!kEnableKernelIpc ) {
165165 LOG_ALWAYS_FATAL (" Binder kernel driver disabled at build time" );
166166 return nullptr ;
167167 }
168+ LOG_ALWAYS_FATAL_IF (postTask == nullptr , " BAD STATE" );
168169
169170 int32_t trackedUid = -1 ;
170171 if (sCountByUidEnabled ) {
@@ -183,7 +184,11 @@ sp<BpBinder> BpBinder::create(int32_t handle) {
183184 ALOGE (" Still too many binder proxy objects sent to uid %d from uid %d (%d proxies "
184185 " held)" ,
185186 getuid (), trackedUid, trackedValue);
186- if (sLimitCallback ) sLimitCallback (trackedUid);
187+
188+ if (sLimitCallback ) {
189+ *postTask = [=]() { sLimitCallback (trackedUid); };
190+ }
191+
187192 sLastLimitCallbackMap [trackedUid] = trackedValue;
188193 }
189194 } else {
@@ -197,7 +202,11 @@ sp<BpBinder> BpBinder::create(int32_t handle) {
197202 ALOGE (" Too many binder proxy objects sent to uid %d from uid %d (%d proxies held)" ,
198203 getuid (), trackedUid, trackedValue);
199204 sTrackingMap [trackedUid] |= LIMIT_REACHED_MASK;
200- if (sLimitCallback ) sLimitCallback (trackedUid);
205+
206+ if (sLimitCallback ) {
207+ *postTask = [=]() { sLimitCallback (trackedUid); };
208+ }
209+
201210 sLastLimitCallbackMap [trackedUid] = trackedValue & COUNTING_VALUE_MASK;
202211 if (sBinderProxyThrottleCreate ) {
203212 ALOGI (" Throttling binder proxy creates from uid %d in uid %d until binder proxy"
0 commit comments