[PATCH] Cygwin: clipboard: Add workaround for ERROR_CLIPBOARD_NOT_OPEN
Takashi Yano <[email protected]> Tue, 9 Jun 2026 09:20:51 +0900
| Newsgroups | gmane.os.cygwin.patches |
|---|---|
| Message-ID | <[email protected]> |
SetClipboard/Data() and GetClipboardData() occasionally fail with ERROR_CLIPBOARD_NOT_OPEN, even though OpenClipboard() succeeded if NULL HWND is used. Retry until GetClipboardData() does not return ERROR_CLIPBOARD_NOT_OPEN. Addresses: https://cygwin.com/pipermail/cygwin/2026-February/259438.html Signed-off-by: Takashi Yano <[email protected]> Reviewed-by: Mark Geisert <[email protected]> --- winsup/cygwin/fhandler/clipboard.cc | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/winsup/cygwin/fhandler/clipboard.cc b/winsup/cygwin/fhandler/clipboard.cc index 12691c7c1..db33d839f 100644 --- a/winsup/cygwin/fhandler/clipboard.cc +++ b/winsup/cygwin/fhandler/clipboard.cc @@ -25,11 +25,21 @@ details. */ static inline bool open_clipboard () { - const int max_retry = 10; + const int max_retry = 20; for (int i = 0; i < max_retry; i++) { + /* No appropriate HWND exists here. */ if (OpenClipboard (NULL)) - return true; + { + /* SetClipboard/Data() and GetClipboardData() occasionally + fail with ERROR_CLIPBOARD_NOT_OPEN, even though + OpenClipboard() succeeded if NULL HWND is used. + Retry until GetClipboardData() does not return + ERROR_CLIPBOARD_NOT_OPEN. */ + if (GetClipboardData (CF_UNICODETEXT) + || GetLastError () != ERROR_CLIPBOARD_NOT_OPEN) + return true; + } Sleep (1); } return false; -- 2.51.0