Merge "Change the framework to use the new camera preview path."
diff --git a/core/java/android/os/Message.java b/core/java/android/os/Message.java
index 49b72fe..6d8be77 100644
--- a/core/java/android/os/Message.java
+++ b/core/java/android/os/Message.java
@@ -74,6 +74,10 @@
      */
     public Messenger replyTo;
     
+    /*package*/ static final int FLAG_IN_USE = 1;
+    
+    /*package*/ int flags;
+    
     /*package*/ long when;
     
     /*package*/ Bundle data;
@@ -253,6 +257,7 @@
      * target/callback of the original message.
      */
     public void copyFrom(Message o) {
+        this.flags = o.flags;
         this.what = o.what;
         this.arg1 = o.arg1;
         this.arg2 = o.arg2;
@@ -350,6 +355,7 @@
     }
 
     /*package*/ void clearForRecycle() {
+        flags = 0;
         what = 0;
         arg1 = 0;
         arg2 = 0;
@@ -361,6 +367,14 @@
         data = null;
     }
 
+    /*package*/ boolean isInUse() {
+        return ((flags & FLAG_IN_USE) == FLAG_IN_USE);
+    }
+
+    /*package*/ void markInUse() {
+        flags |= FLAG_IN_USE;
+    }
+
     /** Constructor (but the preferred way to get a Message is to call {@link #obtain() Message.obtain()}).
     */
     public Message() {
@@ -453,4 +467,3 @@
         replyTo = Messenger.readMessengerOrNullFromParcel(source);
     }
 }
-
diff --git a/core/java/android/os/MessageQueue.java b/core/java/android/os/MessageQueue.java
index adb11c8..75dfdd2 100644
--- a/core/java/android/os/MessageQueue.java
+++ b/core/java/android/os/MessageQueue.java
@@ -120,6 +120,7 @@
                 now = SystemClock.uptimeMillis();
                 Message msg = pullNextLocked(now);
                 if (msg != null) {
+                    msg.markInUse();
                     return msg;
                 }
                 
@@ -192,7 +193,7 @@
     }
 
     final boolean enqueueMessage(Message msg, long when) {
-        if (msg.when != 0) {
+        if (msg.isInUse()) {
             throw new AndroidRuntimeException(msg
                     + " This message is already in use.");
         }
diff --git a/core/tests/coretests/src/android/os/MessageQueueTest.java b/core/tests/coretests/src/android/os/MessageQueueTest.java
index b7c2d1f..12931ec 100644
--- a/core/tests/coretests/src/android/os/MessageQueueTest.java
+++ b/core/tests/coretests/src/android/os/MessageQueueTest.java
@@ -41,6 +41,10 @@
         }
 
         public void handleMessage(Message msg) {
+            if (!msg.isInUse()) {
+                failure(new RuntimeException(
+                        "msg.isInuse is false, should always be true, #" + msg.what));
+            }
             if (mCount <= mLastMessage) {
                 if (msg.what != mCount) {
                     failure(new RuntimeException(
@@ -100,4 +104,3 @@
         tester.doTest(1000);
     }
 }
-