--- old/src/java.desktop/windows/native/libawt/windows/awt_Toolkit.cpp 2015-08-03 17:08:40.045744100 +0300 +++ new/src/java.desktop/windows/native/libawt/windows/awt_Toolkit.cpp 2015-08-03 17:08:39.465686100 +0300 @@ -321,6 +321,7 @@ ::GetKeyboardState(m_lastKeyboardState); m_waitEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL); + isInDoDragDropLoop = FALSE; eventNumber = 0; } @@ -2663,8 +2664,14 @@ { 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); + while (WAIT_TIMEOUT == ::WaitForSingleObject(tk.m_waitEvent, 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-03 17:08:43.549094400 +0300 +++ new/src/java.desktop/windows/native/libawt/windows/awt_Toolkit.h 2015-08-03 17:08:42.958035300 +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-03 17:08:46.814420900 +0300 +++ new/src/java.desktop/windows/native/libawt/windows/awt_DnDDS.cpp 2015-08-03 17:08:46.211360600 +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;