summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorJing Ji <jji@google.com>2020-03-04 10:31:53 -0800
committerJing Ji <jji@google.com>2020-05-08 21:14:23 +0000
commitbaf2d6448e1558f7c453497c85e5845b46f9cbec (patch)
tree53b3f4796e147b3c73d335c19473622eeeb18e5e /core/java/android
parent511c3aa955ba997511797af7709d83c9f8d43bd1 (diff)
Check the isInUse with the lock held in MessageQueue
Fix a potential race condtion when the same message object is being enqueued by two threads. Bug: 150263007 Bug: 154867444 Test: atest android.os.cts.MessageQueueTest Change-Id: Id79448ba8719479cbdb054f2cdd172fdcbe86d47 (cherry picked from commit 96a6fec4d651607f0f0b659dd2e8dccaa9b1ed43)
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/os/MessageQueue.java7
1 files changed, 4 insertions, 3 deletions
diff --git a/core/java/android/os/MessageQueue.java b/core/java/android/os/MessageQueue.java
index dfa5b26142f8..1a3cf2d2c634 100644
--- a/core/java/android/os/MessageQueue.java
+++ b/core/java/android/os/MessageQueue.java
@@ -550,11 +550,12 @@ public final class MessageQueue {
if (msg.target == null) {
throw new IllegalArgumentException("Message must have a target.");
}
- if (msg.isInUse()) {
- throw new IllegalStateException(msg + " This message is already in use.");
- }
synchronized (this) {
+ if (msg.isInUse()) {
+ throw new IllegalStateException(msg + " This message is already in use.");
+ }
+
if (mQuitting) {
IllegalStateException e = new IllegalStateException(
msg.target + " sending message to a Handler on a dead thread");