From 9cfd7972d978504cfdddf7d8e829a67c664d32d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sat, 28 Mar 2015 21:31:34 +0100 Subject: [PATCH] Added patch to fix return value of WS_select in case of EINTR during timeout. --- README.md | 3 +- debian/changelog | 1 + patches/patchinstall.sh | 16 ++++++++++ ...urn-an-error-in-WS_select-when-EINTR.patch | 30 +++++++++++++++++++ patches/ws2_32-WS_select/definition | 1 + 5 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 patches/ws2_32-WS_select/0001-ws2_32-Don-t-return-an-error-in-WS_select-when-EINTR.patch create mode 100644 patches/ws2_32-WS_select/definition diff --git a/README.md b/README.md index 16c61904..c2fad0b4 100644 --- a/README.md +++ b/README.md @@ -38,10 +38,11 @@ Wine. All those differences are also documented on the Included bug fixes and improvements =================================== -**Bugfixes and features included in the next upcoming release [6]:** +**Bugfixes and features included in the next upcoming release [7]:** * Add stubs for Power[Set|Clear]Request * Avoid spam of FIXME messages for PsLookupProcessByProcessId stub ([Wine Bug #36821](https://bugs.winehq.org/show_bug.cgi?id=36821)) +* Don't return an error in WS_select when EINTR happens during timeout * Fix compatibility of Uplay with gnutls28 ([Wine Bug #38134](https://bugs.winehq.org/show_bug.cgi?id=38134)) * Fix handling of ANSI NTLM credentials ([Wine Bug #37063](https://bugs.winehq.org/show_bug.cgi?id=37063)) * Implement empty enumerator for IWiaDevMgr::EnumDeviceInfo ([Wine Bug #27775](https://bugs.winehq.org/show_bug.cgi?id=27775)) diff --git a/debian/changelog b/debian/changelog index 347a1024..87da0c42 100644 --- a/debian/changelog +++ b/debian/changelog @@ -6,6 +6,7 @@ wine-staging (1.7.40) UNRELEASED; urgency=low * Added patch to fix handling of ANSI NTLM credentials. * Added patch to fix compatibility of Uplay with gnutls28. * Added patches for Environmental Audio Extensions (EAX), pull request #311 from Mark Harmstone. + * Added patch to fix return value of WS_select in case of EINTR during timeout. * Removed patch to fix regression causing black screen on startup (accepted upstream). * Removed patch to fix edge cases in TOOLTIPS_GetTipText (fixed upstream). * Removed patch for IConnectionPoint/INetworkListManagerEvents stub interface (accepted upstream). diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index ee61f6a0..1fbf292e 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -236,6 +236,7 @@ patch_enable_all () enable_ws2_32_APC_Performance="$1" enable_ws2_32_Connect_Time="$1" enable_ws2_32_TransmitFile="$1" + enable_ws2_32_WS_select="$1" enable_ws2_32_WriteWatches="$1" enable_ws2_32_getaddrinfo="$1" enable_wtsapi32_EnumerateProcesses="$1" @@ -767,6 +768,9 @@ patch_enable () ws2_32-TransmitFile) enable_ws2_32_TransmitFile="$2" ;; + ws2_32-WS_select) + enable_ws2_32_WS_select="$2" + ;; ws2_32-WriteWatches) enable_ws2_32_WriteWatches="$2" ;; @@ -4699,6 +4703,18 @@ if test "$enable_ws2_32_TransmitFile" -eq 1; then ) >> "$patchlist" fi +# Patchset ws2_32-WS_select +# | +# | Modified files: +# | * dlls/ws2_32/socket.c +# | +if test "$enable_ws2_32_WS_select" -eq 1; then + patch_apply ws2_32-WS_select/0001-ws2_32-Don-t-return-an-error-in-WS_select-when-EINTR.patch + ( + echo '+ { "Michael Müller", "ws2_32: Don'\''t return an error in WS_select when EINTR happens during timeout.", 1 },'; + ) >> "$patchlist" +fi + # Patchset ws2_32-getaddrinfo # | # | This patchset fixes the following Wine bugs: diff --git a/patches/ws2_32-WS_select/0001-ws2_32-Don-t-return-an-error-in-WS_select-when-EINTR.patch b/patches/ws2_32-WS_select/0001-ws2_32-Don-t-return-an-error-in-WS_select-when-EINTR.patch new file mode 100644 index 00000000..373f2b63 --- /dev/null +++ b/patches/ws2_32-WS_select/0001-ws2_32-Don-t-return-an-error-in-WS_select-when-EINTR.patch @@ -0,0 +1,30 @@ +From c3996fd61ba65678d9cfefed715a137b697a72a1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Michael=20M=C3=BCller?= +Date: Sat, 28 Mar 2015 20:47:52 +0100 +Subject: ws2_32: Don't return an error in WS_select when EINTR happens during + timeout. + +--- + dlls/ws2_32/socket.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c +index e7e3de5..d99e566 100644 +--- a/dlls/ws2_32/socket.c ++++ b/dlls/ws2_32/socket.c +@@ -4601,7 +4601,11 @@ int WINAPI WS_select(int nfds, WS_fd_set *ws_readfds, + } + + timeout = torig - (tv2.tv_sec * 1000) - (tv2.tv_usec + 999) / 1000; +- if (timeout <= 0) break; ++ if (timeout <= 0) ++ { ++ ret = 0; ++ break; ++ } + } else break; + } + release_poll_fds( ws_readfds, ws_writefds, ws_exceptfds, pollfds ); +-- +2.1.0 + diff --git a/patches/ws2_32-WS_select/definition b/patches/ws2_32-WS_select/definition new file mode 100644 index 00000000..6a7f4c1c --- /dev/null +++ b/patches/ws2_32-WS_select/definition @@ -0,0 +1 @@ +Fixes: Don't return an error in WS_select when EINTR happens during timeout