Merge jdk7u25-b06 into jdk7u25-b07
diff --git a/.hgtags-top-repo b/.hgtags-top-repo
index 1617146..5bd28e2 100644
--- a/.hgtags-top-repo
+++ b/.hgtags-top-repo
@@ -268,3 +268,4 @@
 50bfbd21bf42f6ae4167226ac45cd79e0ab7758c jdk7u25-b03
 a94c9aa356bbed13c1e2b4a9a380117ddff1668f jdk7u25-b04
 29a789ae14dc09a50eb45d3445075642e77490a2 jdk7u25-b05
+8a7c657b7536006633b5e961d93e2173712a64fa jdk7u25-b06
diff --git a/corba/.hgtags b/corba/.hgtags
index 5832789..f7d0050 100644
--- a/corba/.hgtags
+++ b/corba/.hgtags
@@ -270,3 +270,4 @@
 2057de7ee6b17ab3335ec6cd5730f88f4cfe9502 jdk7u25-b03
 b180f1282ad221bde0d4d865c879c0fa7f8ef4c8 jdk7u25-b04
 d97e6c162735798fe0c9f1dd582aa1114b6c5447 jdk7u25-b05
+da9301dac56c26846212db33bb20001652b6ce60 jdk7u25-b06
diff --git a/hotspot/.hgtags b/hotspot/.hgtags
index afa29d3..889167c 100644
--- a/hotspot/.hgtags
+++ b/hotspot/.hgtags
@@ -391,3 +391,4 @@
 655bea6843fb7beabd8d9eeda59572c0c7055b85 jdk7u25-b03
 96a4e612195c0d753be24cf38fea0ee8ce30edcf jdk7u25-b04
 7151c26b838828a20cb28595ef1f70403d1868cf jdk7u25-b05
+fbb5f6083dd00ca7417e4a45311f33918bb2a5f0 jdk7u25-b06
diff --git a/jaxp/.hgtags b/jaxp/.hgtags
index 0c11782..30188c1 100644
--- a/jaxp/.hgtags
+++ b/jaxp/.hgtags
@@ -270,3 +270,4 @@
 fe858d7d6a13829d0ef0a1f762bd0e769cd24fa1 jdk7u25-b03
 1a2822a1d6a40c6e469f4089f39e41f642a87843 jdk7u25-b04
 e927605d1678c5d94adfc44183160d6c4df05b8b jdk7u25-b05
+8dfb4db227e7795120c072781927ba7d35186559 jdk7u25-b06
diff --git a/jaxws/.hgtags b/jaxws/.hgtags
index eac1608..a553a67 100644
--- a/jaxws/.hgtags
+++ b/jaxws/.hgtags
@@ -270,3 +270,4 @@
 4635a58db6b028f78a30c972ac47f9c5577bedfd jdk7u25-b03
 57d4548795c39e19099fc0a760d7887f83b1564f jdk7u25-b04
 35882693ee358e3a8b92d632dafa98e05fe72437 jdk7u25-b05
+c141079e609653ec700d2e71f16be4a5859e9a42 jdk7u25-b06
diff --git a/jdk/.hgtags b/jdk/.hgtags
index 0528d9e..038a498 100644
--- a/jdk/.hgtags
+++ b/jdk/.hgtags
@@ -269,3 +269,4 @@
 2a444d8e36ebc7161a735b45143b22e141d9a5c0 jdk7u25-b03
 7fc6c331082c3586fa6c6ead014c96f3c532bc34 jdk7u25-b04
 f2d4da9ba0f05165e8a85d0fd5085d707e434eab jdk7u25-b05
+5748526c96f0d3fd5771b72a81fcd61f4e23b0d8 jdk7u25-b06
diff --git a/jdk/src/share/classes/java/awt/EventQueue.java b/jdk/src/share/classes/java/awt/EventQueue.java
index d2c81cd..2648144 100644
--- a/jdk/src/share/classes/java/awt/EventQueue.java
+++ b/jdk/src/share/classes/java/awt/EventQueue.java
@@ -174,6 +174,11 @@
      */
     private volatile int waitForID;
 
+    /*
+     * AppContext corresponding to the queue.
+     */
+    private final AppContext appContext;
+
     private final String name = "AWT-EventQueue-" + threadInitNumber.getAndIncrement();
 
     private static final PlatformLogger eventLog = PlatformLogger.getLogger("java.awt.event.EventQueue");
@@ -220,8 +225,9 @@
          * completes thus causing mess in thread group to appcontext mapping.
          */
 
-        pushPopLock = (Lock)AppContext.getAppContext().get(AppContext.EVENT_QUEUE_LOCK_KEY);
-        pushPopCond = (Condition)AppContext.getAppContext().get(AppContext.EVENT_QUEUE_COND_KEY);
+        appContext = AppContext.getAppContext();
+        pushPopLock = (Lock)appContext.get(AppContext.EVENT_QUEUE_LOCK_KEY);
+        pushPopCond = (Condition)appContext.get(AppContext.EVENT_QUEUE_COND_KEY);
     }
 
     /**
@@ -235,7 +241,7 @@
      * @throws NullPointerException if <code>theEvent</code> is <code>null</code>
      */
     public void postEvent(AWTEvent theEvent) {
-        SunToolkit.flushPendingEvents();
+        SunToolkit.flushPendingEvents(appContext);
         postEventPrivate(theEvent);
     }
 
@@ -526,7 +532,7 @@
              * of the synchronized block to avoid deadlock when
              * event queues are nested with push()/pop().
              */
-            SunToolkit.flushPendingEvents();
+            SunToolkit.flushPendingEvents(appContext);
             pushPopLock.lock();
             try {
                 AWTEvent event = getNextEventPrivate();
@@ -566,7 +572,7 @@
              * of the synchronized block to avoid deadlock when
              * event queues are nested with push()/pop().
              */
-            SunToolkit.flushPendingEvents();
+            SunToolkit.flushPendingEvents(appContext);
             pushPopLock.lock();
             try {
                 for (int i = 0; i < NUM_PRIORITIES; i++) {
@@ -874,7 +880,6 @@
             newEventQueue.previousQueue = topQueue;
             topQueue.nextQueue = newEventQueue;
 
-            AppContext appContext = AppContext.getAppContext();
             if (appContext.get(AppContext.EVENT_QUEUE_KEY) == topQueue) {
                 appContext.put(AppContext.EVENT_QUEUE_KEY, newEventQueue);
             }
@@ -935,7 +940,6 @@
                 topQueue.dispatchThread.setEventQueue(prevQueue);
             }
 
-            AppContext appContext = AppContext.getAppContext();
             if (appContext.get(AppContext.EVENT_QUEUE_KEY) == this) {
                 appContext.put(AppContext.EVENT_QUEUE_KEY, prevQueue);
             }
@@ -1028,7 +1032,6 @@
     final void initDispatchThread() {
         pushPopLock.lock();
         try {
-            AppContext appContext = AppContext.getAppContext();
             if (dispatchThread == null && !threadGroup.isDestroyed() && !appContext.isDisposed()) {
                 dispatchThread = AccessController.doPrivileged(
                     new PrivilegedAction<EventDispatchThread>() {
@@ -1114,7 +1117,7 @@
      * <code>removeNotify</code> method.
      */
     final void removeSourceEvents(Object source, boolean removeAllEvents) {
-        SunToolkit.flushPendingEvents();
+        SunToolkit.flushPendingEvents(appContext);
         pushPopLock.lock();
         try {
             for (int i = 0; i < NUM_PRIORITIES; i++) {
diff --git a/jdk/src/share/classes/javax/swing/RepaintManager.java b/jdk/src/share/classes/javax/swing/RepaintManager.java
index ca20c5d..1706a95 100644
--- a/jdk/src/share/classes/javax/swing/RepaintManager.java
+++ b/jdk/src/share/classes/javax/swing/RepaintManager.java
@@ -342,7 +342,7 @@
 
         // Queue a Runnable to invoke paintDirtyRegions and
         // validateInvalidComponents.
-        scheduleProcessingRunnable();
+        scheduleProcessingRunnable(SunToolkit.targetToAppContext(invalidComponent));
     }
 
 
@@ -431,7 +431,7 @@
 
         // Queue a Runnable to invoke paintDirtyRegions and
         // validateInvalidComponents.
-        scheduleProcessingRunnable();
+        scheduleProcessingRunnable(SunToolkit.targetToAppContext(c));
     }
 
     /**
@@ -1373,10 +1373,6 @@
         return paintManager;
     }
 
-    private void scheduleProcessingRunnable() {
-        scheduleProcessingRunnable(AppContext.getAppContext());
-    }
-
     private void scheduleProcessingRunnable(AppContext context) {
         if (processingRunnable.markPending()) {
             Toolkit tk = Toolkit.getDefaultToolkit();
diff --git a/jdk/src/share/classes/sun/awt/SunToolkit.java b/jdk/src/share/classes/sun/awt/SunToolkit.java
index 6015c39..fde8970 100644
--- a/jdk/src/share/classes/sun/awt/SunToolkit.java
+++ b/jdk/src/share/classes/sun/awt/SunToolkit.java
@@ -97,6 +97,14 @@
      */
     public final static int MAX_BUTTONS_SUPPORTED = 20;
 
+    /**
+     * Creates and initializes EventQueue instance for the specified
+     * AppContext.
+     * Note that event queue must be created from createNewAppContext()
+     * only in order to ensure that EventQueue constructor obtains
+     * the correct AppContext.
+     * @param appContext AppContext to associate with the event queue
+     */
     private static void initEQ(AppContext appContext) {
         EventQueue eventQueue;
 
@@ -514,13 +522,17 @@
      * EventQueue yet.
      */
     public static void flushPendingEvents()  {
+        AppContext appContext = AppContext.getAppContext();
+        flushPendingEvents(appContext);
+    }
+
+    public static void flushPendingEvents(AppContext appContext)  {
         flushLock.lock();
         try {
             // Don't call flushPendingEvents() recursively
             if (!isFlushingPendingEvents) {
                 isFlushingPendingEvents = true;
                 try {
-                    AppContext appContext = AppContext.getAppContext();
                     PostEventQueue postEventQueue =
                         (PostEventQueue)appContext.get(POST_EVENT_QUEUE_KEY);
                     if (postEventQueue != null) {
diff --git a/jdk/src/share/native/sun/awt/medialib/awt_ImagingLib.c b/jdk/src/share/native/sun/awt/medialib/awt_ImagingLib.c
index e86fb6c..2e81b63 100644
--- a/jdk/src/share/native/sun/awt/medialib/awt_ImagingLib.c
+++ b/jdk/src/share/native/sun/awt/medialib/awt_ImagingLib.c
@@ -1298,20 +1298,24 @@
         return 0;
     }
 
-    lut_nbands = (*env)->GetArrayLength(env, jtableArrays);
+    nbands = setImageHints(env, srcImageP, dstImageP, FALSE, TRUE,
+                        FALSE, &hint);
+
+    if (nbands < 1 || nbands > srcImageP->cmodel.numComponents) {
+        /* Can't handle any custom images */
+        awt_freeParsedImage(srcImageP, TRUE);
+        awt_freeParsedImage(dstImageP, TRUE);
+        return 0;
+    }
 
     ncomponents = srcImageP->cmodel.isDefaultCompatCM
         ? 4
         : srcImageP->cmodel.numComponents;
 
-    if (lut_nbands > ncomponents) {
-        lut_nbands = ncomponents;
-    }
-
     /* Make sure that color order can be used for
      * re-ordering of lookup arrays.
      */
-    for (i = 0; i < ncomponents; i++) {
+    for (i = 0; i < nbands; i++) {
         int idx = srcImageP->hints.colorOrder[i];
 
         if (idx < 0 || idx >= ncomponents) {
@@ -1321,6 +1325,12 @@
         }
     }
 
+    lut_nbands = (*env)->GetArrayLength(env, jtableArrays);
+
+    if (lut_nbands > ncomponents) {
+        lut_nbands = ncomponents;
+    }
+
     tbl = NULL;
     if (SAFE_TO_ALLOC_2(ncomponents, sizeof(unsigned char *))) {
         tbl = (unsigned char **)
@@ -1363,17 +1373,6 @@
         }
     }
 
-    nbands = setImageHints(env, srcImageP, dstImageP, FALSE, TRUE,
-                        FALSE, &hint);
-    if (nbands < 1) {
-        /* Can't handle any custom images */
-        free(tbl);
-        free(jtable);
-        awt_freeParsedImage(srcImageP, TRUE);
-        awt_freeParsedImage(dstImageP, TRUE);
-        return 0;
-    }
-
     /* Allocate the arrays */
     if (allocateArray(env, srcImageP, &src, &sdata, TRUE, FALSE, FALSE) < 0) {
         /* Must be some problem */
diff --git a/jdk/test/java/awt/image/mlib/MlibOpsTest.java b/jdk/test/java/awt/image/mlib/MlibOpsTest.java
index aed30d5..8f8bf7b 100644
--- a/jdk/test/java/awt/image/mlib/MlibOpsTest.java
+++ b/jdk/test/java/awt/image/mlib/MlibOpsTest.java
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug     6556332
+ * @bug     6556332 8011992 8012112
  * @summary Test verifies that on-demnad loading of medialib library does
  *          not break imageing ops based on this library.
  * @run     main MlibOpsTest
diff --git a/langtools/.hgtags b/langtools/.hgtags
index 416aa04..63a5f19 100644
--- a/langtools/.hgtags
+++ b/langtools/.hgtags
@@ -270,3 +270,4 @@
 8dc40e209a12638ea18bb7ee436051768afa5d39 jdk7u25-b03
 d7f974b867c4cf771ab749871c2ff4d3f869f13f jdk7u25-b04
 e8d01d8ee8f547f97d8670157ddf5a798459b85a jdk7u25-b05
+25489e38393b7c70fb826069d50860fbc409d11d jdk7u25-b06