--- old/src/java.desktop/windows/native/libawt/windows/awt_Toolkit.cpp 2015-08-04 14:43:03.466507600 +0300 +++ new/src/java.desktop/windows/native/libawt/windows/awt_Toolkit.cpp 2015-08-04 14:43:02.877448700 +0300 @@ -321,6 +321,7 @@ ::GetKeyboardState(m_lastKeyboardState); m_waitEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL); + isInDoDragDropLoop = FALSE; eventNumber = 0; } @@ -2663,8 +2664,15 @@ { AwtToolkit & tk = AwtToolkit::GetInstance(); DWORD eventNumber = tk.eventNumber; - tk.PostMessage(WM_SYNC_WAIT, 0, 0); - ::WaitForSingleObject(tk.m_waitEvent, INFINITE); + if (!tk.isInDoDragDropLoop) { + tk.PostMessage(WM_SYNC_WAIT, 0, 0); + for(long t = 2; t < timeout && + WAIT_TIMEOUT == ::WaitForSingleObject(tk.m_waitEvent, 2); t+=2) { + if (tk.isInDoDragDropLoop) { + break; + } + } + } DWORD newEventNumber = tk.eventNumber; return (newEventNumber - eventNumber) > 2; } --- old/src/java.desktop/windows/native/libawt/windows/awt_Toolkit.h 2015-08-04 14:43:06.655826500 +0300 +++ new/src/java.desktop/windows/native/libawt/windows/awt_Toolkit.h 2015-08-04 14:43:06.143775300 +0300 @@ -385,7 +385,8 @@ static BOOL activateKeyboardLayout(HKL hkl); HANDLE m_waitEvent; - DWORD eventNumber; + volatile DWORD eventNumber; + volatile BOOL isInDoDragDropLoop; private: HWND CreateToolkitWnd(LPCTSTR name); --- old/src/java.desktop/windows/native/libawt/windows/awt_DnDDS.cpp 2015-08-04 14:43:09.303091200 +0300 +++ new/src/java.desktop/windows/native/libawt/windows/awt_DnDDS.cpp 2015-08-04 14:43:08.794040300 +0300 @@ -266,11 +266,14 @@ dragSource->Signal(); + AwtToolkit &toolkit = AwtToolkit::GetInstance(); + toolkit.isInDoDragDropLoop = TRUE; res = ::DoDragDrop(dragSource, dragSource, convertActionsToDROPEFFECT(dragSource->m_actions), &effects ); + toolkit.isInDoDragDropLoop = FALSE; if (effects == DROPEFFECT_NONE && dragSource->m_dwPerformedDropEffect != DROPEFFECT_NONE) { effects = dragSource->m_dwPerformedDropEffect;