Skip to content

Commit df75cf6

Browse files
author
Steven Moreland
committed
libbinder: also avaid sWarningCallback lock
Since binders are made in FastNative or CriticalNative code, they may be called while holding the mutator lock, which another thread may try to lock, which already holds the native lock held here. This was previously fixed for calls to sLimitCallback, but this fixes things for sWarningCallback as well, which was added later. Bug: 372506687 Bug: 354286280 Bug: 199683153 Bug: 352692435 Test: boot Change-Id: Iafe1208b331df74ad2b2117ae0ceab4663f53c41
1 parent bad4c6e commit df75cf6

1 file changed

Lines changed: 3 additions & 1 deletion

File tree

libs/binder/BpBinder.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,9 @@ sp<BpBinder> BpBinder::create(int32_t handle, std::function<void()>* postTask) {
197197
&& currentValue < sBinderProxyCountHighWatermark
198198
&& ((trackedValue & WARNING_REACHED_MASK) == 0)) [[unlikely]] {
199199
sTrackingMap[trackedUid] |= WARNING_REACHED_MASK;
200-
if (sWarningCallback) sWarningCallback(trackedUid);
200+
if (sWarningCallback) {
201+
*postTask = [=]() { sWarningCallback(trackedUid); };
202+
}
201203
} else if (currentValue >= sBinderProxyCountHighWatermark) {
202204
ALOGE("Too many binder proxy objects sent to uid %d from uid %d (%d proxies held)",
203205
getuid(), trackedUid, trackedValue);

0 commit comments

Comments
 (0)