[newlib-cygwin] Cygwin: clipboard: Add workaround for ERROR_CLIPBOARD_NOT_OPEN
Takashi Yano via Cygwin-cvs <[email protected]> Sat, 13 Jun 2026 07:28:06 +0000 (GMT)
| Newsgroups | gmane.os.cygwin.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://sourceware.org/git/gitweb.cgi?p=3Dnewlib-cygwin.git;h=3D7fd670a36b9= a26c357f61650a6ec4a0e09936b7c commit 7fd670a36b9a26c357f61650a6ec4a0e09936b7c Author: Takashi Yano <[email protected]> Date: Tue Jun 9 09:14:57 2026 +0900 Cygwin: clipboard: Add workaround for ERROR_CLIPBOARD_NOT_OPEN =20 SetClipboardData() 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. =20 Addresses: https://cygwin.com/pipermail/cygwin/2026-February/259438.html Signed-off-by: Takashi Yano <[email protected]> Reviewed-by: Mark Geisert <[email protected]> Diff: --- winsup/cygwin/fhandler/clipboard.cc | 21 +++++++++++++++++++-- winsup/cygwin/release/3.6.10 | 3 +++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/winsup/cygwin/fhandler/clipboard.cc b/winsup/cygwin/fhandler/c= lipboard.cc index 12691c7c1..116feb599 100644 --- a/winsup/cygwin/fhandler/clipboard.cc +++ b/winsup/cygwin/fhandler/clipboard.cc @@ -25,11 +25,28 @@ details. */ static inline bool open_clipboard () { - const int max_retry =3D 10; + const int max_retry =3D 20; for (int i =3D 0; i < max_retry; i++) { + /* No appropriate HWND exists here. */ if (OpenClipboard (NULL)) - return true; + { + /* SetClipboardData() 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)) + return true; + DWORD err =3D GetLastError (); + /* Here, ERROR_NOT_FOUND means the clipboard does not contains + valid CF_UNICODETEXT. OpenClipboard() must have succeeded. */ + if (err =3D=3D ERROR_NOT_FOUND) + return true; + CloseClipboard (); + if (err !=3D ERROR_CLIPBOARD_NOT_OPEN) + return false; + } Sleep (1); } return false; diff --git a/winsup/cygwin/release/3.6.10 b/winsup/cygwin/release/3.6.10 index e29c3d6c0..506f79b21 100644 --- a/winsup/cygwin/release/3.6.10 +++ b/winsup/cygwin/release/3.6.10 @@ -8,3 +8,6 @@ Fixes: =20 - Fix behaviour with OPEN_MAX files open Addresses: https://cygwin.com/pipermail/cygwin/2026-May/259664.html + +- Add workaround for clipboard access error. + Addresses: https://cygwin.com/pipermail/cygwin/2026-February/259438.html