--- old/src/java.desktop/unix/classes/sun/awt/X11/XClipboard.java 2015-05-08 18:46:20.699614100 +0300 +++ new/src/java.desktop/unix/classes/sun/awt/X11/XClipboard.java 2015-05-08 18:46:19.905013200 +0300 @@ -156,19 +156,24 @@ isSelectionNotifyProcessed = true; boolean mustSchedule = false; - synchronized (XClipboard.classLock) { - if (targetsAtom2Clipboard == null) { - targetsAtom2Clipboard = new HashMap(2); + XToolkit.awtLock(); + try { + synchronized (XClipboard.classLock) { + if (targetsAtom2Clipboard == null) { + targetsAtom2Clipboard = new HashMap(2); + } + mustSchedule = targetsAtom2Clipboard.isEmpty(); + targetsAtom2Clipboard.put(getTargetsPropertyAtom().getAtom(), this); + if (mustSchedule) { + XToolkit.addEventDispatcher(XWindow.getXAWTRootWindow().getWindow(), + new SelectionNotifyHandler()); + } } - mustSchedule = targetsAtom2Clipboard.isEmpty(); - targetsAtom2Clipboard.put(getTargetsPropertyAtom().getAtom(), this); if (mustSchedule) { - XToolkit.addEventDispatcher(XWindow.getXAWTRootWindow().getWindow(), - new SelectionNotifyHandler()); + XToolkit.schedule(new CheckChangeTimerTask(), XClipboard.getPollInterval()); } - } - if (mustSchedule) { - XToolkit.schedule(new CheckChangeTimerTask(), XClipboard.getPollInterval()); + } finally { + XToolkit.awtUnlock(); } }