[Bug 37135] New: Wine fails to handle EWOULDBLOCK return from sendmsg
https://bugs.winehq.org/show_bug.cgi?id=37135 Bug ID: 37135 Summary: Wine fails to handle EWOULDBLOCK return from sendmsg Product: Wine Version: 1.7.24 Hardware: x86 OS: Solaris Status: UNCONFIRMED Severity: critical Priority: P2 Component: -unknown Assignee: wine-bugs(a)winehq.org Reporter: carson(a)taltos.org On Solaris 11.2, launching any application via "wine c:\somepath\foo.exe" frequently fails, printing the following errors: sendmsg: Resource temporarily unavailable sendmsg: Resource temporarily unavailable Protocol error: process 000c: Protocol error: process 000 Debugging, I find these errors come from 2 different places. Fixing both makes wine run reliably. server/request.c dlls/ntdll/server.c The fix for ./dlls/ntdll/server.c is easy, just add EWOULDBLOCK to the EINTR case that's already present. dlls/ntdll/server.c requires the addition of a loop around sendmsg as well as handling the non-fatal EWOULDBLOCK (and it should probably retry EINTR as well). I can generate patches if desired, but the fixes are fairly obvious. -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
https://bugs.winehq.org/show_bug.cgi?id=37135 Claude <francois.pinet(a)irstea.fr> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |francois.pinet(a)irstea.fr --- Comment #1 from Claude <francois.pinet(a)irstea.fr> --- Thank you for these useful information. This bug makes Wine unusable on the last Solaris version (11.2) - numerous random crashes occur. The following update has fixed the issue (I have used Wine 1.7.0): 1) In procedure “send_client_fd” (server/request.c): Replace: ret = sendmsg( get_unix_fd( process->msg_fd ), &msghdr, 0 ); if (ret == sizeof(handle)) return 0; by: for (;;){ ret = sendmsg( get_unix_fd( process->msg_fd ), &msghdr, 0 ); if (ret == sizeof(handle)) return 0;} 2) In procedure “wine_server_send_fd” (dlls/ntdll/server.c) Replace: server_protocol_perror( "sendmsg" ); By: /*server_protocol_perror( "sendmsg" );*/ This is a “very dirty” update but it seems this have fixed the problem for Solaris 11.2. If someone could help to implement a reliable patch for the last versions of Wine… This will make Wine useable on the last versions of Solaris. -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
https://bugs.winehq.org/show_bug.cgi?id=37135 Sebastian Lackner <sebastian(a)fds-team.de> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |sebastian(a)fds-team.de --- Comment #2 from Sebastian Lackner <sebastian(a)fds-team.de> --- It sounds a bit like a workaround for a Solaris kernel bug. According to the Solaris documentations, EWOULDBLOCK should only be returned for non-blocking sockets/pipes, but these pipes should be blocking. It would probably make sense to discuss this on the wine-devel mailing list, and maybe also to involve some more Solaris developers familiar with this area. If its really an intentional difference between Solaris/Linux, it would make sense to submit these changes, take a look here for more details about submitting patches: http://wiki.winehq.org/SubmittingPatches. -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
https://bugs.winehq.org/show_bug.cgi?id=37135 super_man(a)post.com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |super_man(a)post.com -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
https://bugs.winehq.org/show_bug.cgi?id=37135 Bruno Jesus <00cpxxx(a)gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|Wine fails to handle |Solaris 11 sendmsg() |EWOULDBLOCK return from |returns unexpected |sendmsg |EWOULDBLOCK error in | |wineserver calls --- Comment #3 from Bruno Jesus <00cpxxx(a)gmail.com> --- This is probably still an issue in latest Wine, and still unknown if the problem is in Wine or Solaris. -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
https://bugs.winehq.org/show_bug.cgi?id=37135 --- Comment #4 from Claude <francois.pinet(a)irstea.fr> --- It seems this bug has been solved in Solaris 11.3. -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
https://bugs.winehq.org/show_bug.cgi?id=37135 --- Comment #5 from Claude <francois.pinet(a)irstea.fr> --- I have tested to compile and run Wine 1.7.0 and Wine 1.9.7 on Solaris 11.3. There is no message "sendmsg: ..." and no crash related to the EWOULDBLOCK error. The EWOULDBLOCK error seems to be related to Solaris 11.2 (i.e., the previous Solaris version) Additional information: - A symbolic link "/usr/lib/freetype" has been created for "/usr/lib/freetype2" for the compilation - For running graphical application, Wine has been launched by "LD_PRELOAD=libumem.so UMEM_OPTIONS=backend=mmap wine" (to avoid graphical errors), but this issue was not related to the EWOULDBLOCK error. -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
participants (1)
-
wine-bugs@winehq.org