Index: src/VBox/GuestHost/SharedClipboard/clipboard-x11.cpp
===================================================================
--- src/VBox/GuestHost/SharedClipboard/clipboard-x11.cpp	(revision 82099)
+++ src/VBox/GuestHost/SharedClipboard/clipboard-x11.cpp	(working copy)
@@ -270,6 +270,13 @@
     void (*fixesSelectInput)(Display *, Window, Atom, unsigned long);
     /** The first XFixes event number */
     int fixesEventBase;
+    /** XtGetSelectionValue on some versions of libXt isn't re-entrant
+     * so block overlapping requests on this flag. */
+    bool fXtBusy;
+    /** If a request is blocked on the previous flag, set this flag to request
+     * an update later - the first callback should check and clear this flag
+     * before processing the callback event */
+    bool fXtNeedsUpdate;
 };
 
 /**
@@ -703,6 +710,22 @@
 
     CLIPBACKEND *pCtx = reinterpret_cast<CLIPBACKEND *>(pClient);
 
+    if (pCtx->fXtNeedsUpdate)
+    {
+      // The data from this callback is already out of date.  Refresh it.
+      pCtx->fXtNeedsUpdate = false;
+      XtGetSelectionValue(pCtx->widget,
+                          clipGetAtom(pCtx, "CLIPBOARD"),
+                          clipGetAtom(pCtx, "TARGETS"),
+                          clipConvertX11TargetsCallback, pCtx,
+                          CurrentTime);
+      return;
+    }
+    else
+    {
+      pCtx->fXtBusy = false;
+    }
+
     Atom *pAtoms = (Atom *)pValue;
     unsigned i, j;
 
@@ -774,11 +797,19 @@
     LogFlowFuncEnter();
 
 #ifndef TESTCASE
-    XtGetSelectionValue(pCtx->widget,
-                        clipGetAtom(pCtx, "CLIPBOARD"),
-                        clipGetAtom(pCtx, "TARGETS"),
-                        clipConvertX11TargetsCallback, pCtx,
-                        CurrentTime);
+    if (pCtx->fXtBusy)
+    {
+      pCtx->fXtNeedsUpdate = true;
+    }
+    else
+    {
+      pCtx-> fXtBusy = true;
+      XtGetSelectionValue(pCtx->widget,
+                          clipGetAtom(pCtx, "CLIPBOARD"),
+                          clipGetAtom(pCtx, "TARGETS"),
+                          clipConvertX11TargetsCallback, pCtx,
+                          CurrentTime);
+    }
 #else
     tstRequestTargets(pCtx);
 #endif
