Commit Graph

2862 Commits

Author SHA1 Message Date
Jinoh Kang dea1499ac0 server: Replace redundant recv_socket status fields with force_async boolean field.
The 'status' field of recv_socket_request is always either
STATUS_PENDING or STATUS_DEVICE_NOT_READY, and the 'total' field is
always zero.

Replace the 'status' field with 'force_async' boolean field, and get rid
of the 'total' field entirely.

Also, clean up the recv_socket handler code a bit.

Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-10 20:18:39 +01:00
Jinoh Kang e5ce4fa917 server: Attempt to complete I/O request immediately in recv_socket.
Make recv_socket alert the async immediately if poll() call detects that
there are incoming data in the socket, bypassing the wineserver's main
polling loop.

Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-10 20:18:39 +01:00
Jinoh Kang 15483b1a12 server: Allow calling async_handoff() with status code STATUS_ALERTED.
If the server detects that an I/O request could be completed immediately
(e.g. the socket to read from already has incoming data), it can now
return STATUS_ALERTED to allow opportunistic synchronous I/O.  The Unix
side will then attempt to perform I/O in nonblocking mode and report
back the I/O status to the server via the new server request
"set_async_direct_result".  If the operation returns e.g. EAGAIN
or EWOULDBLOCK, the client can opt to either abandon the request (by
specifying an error status) or poll for it in the server as usual (by
waiting on the wait handle).

Without such mechanism in place, the client cannot safely perform
immediately satiable I/O operations synchronously, since it can
potentially conflict with other pending I/O operations that have already
been queued.

Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-10 20:18:38 +01:00
Jacek Caban f139b06651 server: Store all 64 bits of window id.
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-10 18:15:04 +01:00
Jacek Caban 6366694d2b user32: Destroy window server objects from destroy_thread_windows.
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-10 18:11:20 +01:00
Jacek Caban 3cbccd4477 server: Don't allow creating children of orphaned windows.
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-09 18:37:32 +01:00
Jacek Caban 862d0eeff9 server: Orphan child windows when unlinking them from parent.
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-09 18:37:32 +01:00
Jacek Caban 82572350cd server: Don't allow orphaned windows in set_parent request.
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-09 18:37:32 +01:00
Jacek Caban 078bcc066c server: Don't immediately destroy child windows belonging to different thread in free_window_handle.
Notify their thread instead.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-09 18:37:32 +01:00
Jacek Caban d52e454c12 server: Keep a reference to parent in window objects.
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-09 18:37:32 +01:00
Jacek Caban 5b56bad50b server: Make window struct a server object.
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-09 18:37:32 +01:00
Jacek Caban 88131e4764 server: Allocate extra_bytes separately from window struct.
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-09 18:37:32 +01:00
Paul Gofman 4c1a288f63 server: Always update cached socket name after connect.
Fixes a regression introduced by
5c009c17b3.

For IPV6 socket already bound with bind() with IPV6_V6ONLY set to 0
the address returned by getsockname() may change after it is connected
to a IPV4 peer (e. g., from :: to ::ffff:192.0.2.128).

The effect of blamed commit is that before that Unix getsockname()
was called for each ws2_32 getsockname() and after the commit the
socket name is cached at bind and connect.

Signed-off-by: Paul Gofman <pgofman@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-08 15:26:16 +01:00
Paul Gofman 0839773db2 server: Release correct sockets in poll_socket().
Signed-off-by: Paul Gofman <pgofman@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-25 20:50:47 +01:00
Alexandre Julliard 868af0c500 server: Don't depend on the TOKEN_GROUPS structure on the server side.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-25 12:35:54 +01:00
Alexandre Julliard 990cc1c64b server: Define a server-side structure for SID.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-25 12:32:11 +01:00
Alexandre Julliard 841b8862fb server: Define a server-side structure for ACE.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-25 12:21:14 +01:00
Alexandre Julliard c36f81fa75 server: Define a server-side structure for ACL.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-25 12:10:40 +01:00
Alexandre Julliard bf3442fab6 server: Define a server-side structure for SID_AND_ATTRIBUTES.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-25 12:03:14 +01:00
Alexandre Julliard 7d7322671c server: Define a server-side structure for LUID_AND_ATTRIBUTES.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-25 11:55:40 +01:00
Jacek Caban 30de5feca7 server: Use console_add_queue for console output.
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-24 21:44:51 +01:00
Zebediah Figura 7b32a327f8 server: Allocate enough space for the backslash in dup_nt_name() (Valgrind).
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-21 09:23:25 +01:00
Rémi Bernon 095204a9f3 server: Return error when hardware message is too large.
So that the client allocates a larger receive buffer when needed and not
trigger the assert below when setting the reply message data.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-12 17:27:50 +01:00
Zebediah Figura 51e5995d47 server: Avoid reporting POLLOUT on connection failure in poll_single_socket().
Ideally we should be using sock_get_poll_events() and sock_poll_event() instead,
but that seems like an overly risky change for this late in code freeze.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51442
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-07 11:57:00 +01:00
Zebediah Figura 9632048c68 server: Set the event in IOCTL_AFD_EVENT_SELECT if the socket becomes signaled.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52335
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-06 11:34:47 +01:00
Jinoh Kang 9ef5c9c009 server: Reselect only after dequeueing async request.
Otherwise, async_waiting() returns 0, leading the socket object to
believe that the previous async request has not yet been acknowledged.
This results in I/O hang for subsequent reads (until shutdown).

Also, async_destroy() calls async_reselect() only after removing the
async request from the queue.  Make async_set_result() consistent with
this behaviour.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52332
Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-04 18:49:32 +01:00
Alexandre Julliard 14645b06a7 server: Don't return image information for terminating processes.
Fixes a test failure caused by 8eacd3e507.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-03 17:00:24 +01:00
Paul Gofman 8eacd3e507 server: Store PE image info in process structure.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51829
Signed-off-by: Paul Gofman <pgofman@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-02 13:53:08 +01:00
Zebediah Figura b1a2238a10 server: Reselect the socket returned from accept_socket().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52024
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-30 23:09:45 +01:00
Zebediah Figura 674d70a611 server: Avoid using the long double type on non-x86 platforms.
We especially may want to support x86 on ARM, where long double is not an 80-bit
type.

Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-22 10:23:35 +01:00
Eric Pouech 751a3325a6 server/console: Ensure conhost has created the TTY input stream before waiting.
Some PE executables (like mingw's gdb port) just do something like:
- WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), INFINITE) and hang
  for ever (the read operations are done *after* the wait operation
  succeeds)
(of course, the real wait operation is more complex, but the problematic
part boils down to that)

This hangs for ever because conhost's main input thread hasn't been started
yet.

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-17 18:33:45 +01:00
Zebediah Figura 4b00dd097d server: Handle the entire IOCTL_AFD_POLL ioctl on the server side.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-10 22:00:17 +01:00
Zebediah Figura 06fdbd6eda server: Rename the "flags" field of struct poll_req to "mask".
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-10 22:00:17 +01:00
Francois Gouget 7afb9b7d0c server: Fix the spelling of a comment.
Signed-off-by: Francois Gouget <fgouget@free.fr>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-10 22:00:17 +01:00
Alexandre Julliard 411592bf45 configure: Assume that sys/wait.h is available on Unix.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-09 18:43:51 +01:00
Alexandre Julliard e5d69d9ee6 configure: Assume that sys/ioctl.h is available on Unix.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-09 18:43:51 +01:00
Alexandre Julliard a7ac3de3b3 configure: Assume that sys/socket.h is available on Unix.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-09 18:43:51 +01:00
Alexandre Julliard e3001b6a7c configure: Assume that sys/mman.h is available on Unix.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-09 18:43:51 +01:00
Alexandre Julliard 7d5af65591 configure: Assume that termios.h is available on Unix.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-09 18:43:50 +01:00
Jinoh Kang 3e2f443003 server: Fix querying debug port with restricted DACL.
Today, Wine uses NtQueryInformationProcess/ProcessDebugPort to detect
whether the current process is being debugged.  If it is, the process
issues a breakpoint to yield control to the debugger.

Some debuggers (e.g. latest CDB) appear to create debug handles with
restricted DACL, which causes querying debug port to fail with
STATUS_ACCESS_DENIED.  This results in the debuggee erroneously
skipping the initial breakpoint.

Fix this by not requiring DEBUG_ALL_ACCESS when opening the debug port
object.  Instead, use MAXIMUM_ALLOWED for the access mask.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52184
Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-09 17:14:59 +01:00
Damjan Jovanovic 316a358b0f server: FreeBSD 14-CURRENT's sched_setaffinity() needs _WITH_CPU_SET_T defined.
FreeBSD 14-CURRENT got the non-standard sched_setaffinity() function, but
it uses FreeBSD's cpuset_t type instead of Linux's cpu_set_t (also
non-standard). This breaks the build. We have to define _WITH_CPU_SET_T
before including <sched.h> to get that type named cpu_set_t instead.

Signed-off-by: Damjan Jovanovic <damjan.jov@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-07 21:55:16 +01:00
Bernhard Übelacker c488f29122 server: Return ReadDataAvailable value for FilePipeLocalInformation.
Makes Cygwin mintty.exe or script.exe show output, if the
stack issues got worked around.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47808
Signed-off-by: Bernhard Übelacker <bernhardu@mailbox.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-06 22:55:07 +01:00
Paul Gofman c338a6ff99 ntdll: Support THREAD_CREATE_FLAGS_HIDE_FROM_DEBUGGER thread creation flag.
Signed-off-by: Paul Gofman <pgofman@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-06 12:20:34 +01:00
Brendan Shanks f6cefaa9e0 server: Remove workarounds for Mac OS X 10.4.
Signed-off-by: Brendan Shanks <bshanks@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-02 09:50:46 +01:00
Jinoh Kang a4ffa1e7e2 ntdll: Implement NtCompareObjects.
Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-29 23:25:46 +01:00
Jinoh Kang 3b37584316 server: Implement the \??\GLOBALROOT symbolic link.
\??\GLOBALROOT is a well-known NT symbolic link that allows applications
to access the NT object manager's root namespace via Win32 APIs.

Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-25 21:43:49 +01:00
Damjan Jovanovic 93852599c2 server: Implement vm counters on FreeBSD.
Signed-off-by: Damjan Jovanovic <damjan.jov@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-19 18:59:02 +01:00
Ismael Luceno c35df50c30 server: Fix missing include for uid_t.
Explicitly include <sys/types.h> to make uid_t available to users of
server/security.h.

This is a problem on musl, and possibly other non-glibc systems.

Signed-off-by: Ismael Luceno <ismael@iodev.co.uk>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-15 12:07:44 +01:00
Rémi Bernon c37a6e8e40 server: Wait for process exit more often and using increasing delay.
Instead of waiting for 1s before considering it dead, when most of the
time the process dies quickly, delaying desktop or wineserver shutdown.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-12 22:42:51 +01:00
Alexandre Julliard 37c0f5c690 makefiles: Substitute all defined variables in the main makefile.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-10 13:44:44 +01:00