Merge "Update the uid correctly."
diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java
index edbb289..9de6f2a 100644
--- a/services/core/java/com/android/server/AlarmManagerService.java
+++ b/services/core/java/com/android/server/AlarmManagerService.java
@@ -2089,7 +2089,7 @@
             workSource = _ws;
             flags = _flags;
             alarmClock = _info;
-            uid = _uid;
+            uid = operation.getCreatorUid();
             pid = Binder.getCallingPid();
         }
 
@@ -2244,6 +2244,12 @@
                 mInFlight.add(inflight);
                 mBroadcastRefCount++;
                 mTriggeredUids.add(new Integer(alarm.uid));
+                if (checkReleaseWakeLock()) {
+                    if (mWakeLock.isHeld()) {
+                        mWakeLock.release();
+                        if (localLOGV) Slog.v(TAG, "AM WakeLock Released Internally deliverAlarms");
+                    }
+                }
 
                 if (allowWhileIdle) {
                     // Record the last time this uid handled an ALLOW_WHILE_IDLE alarm.
@@ -2712,8 +2718,12 @@
                     }
                 } else {
                     // the next of our alarms is now in flight.  reattribute the wakelock.
+                    InFlight inFlight = null;
                     if (mInFlight.size() > 0) {
-                        InFlight inFlight = mInFlight.get(0);
+                        for(int index = 0; index < mInFlight.size(); index++){
+                            inFlight = mInFlight.get(index);
+                            if(!mBlockedUids.contains(inFlight.mUid)) break;
+                        }
                         setWakelockWorkSource(inFlight.mPendingIntent, inFlight.mWorkSource,
                                 inFlight.mAlarmType, inFlight.mTag, false);
                     } else {