Alexandre Julliard : ntdll: Avoid using RtlQueueWorkItem() in the Unix library.
Alexandre Julliard
julliard at winehq.org
Fri Jul 10 16:30:30 CDT 2020
Module: wine
Branch: master
Commit: 63b66c9955b243e20b280dac236dea4fdf21c92c
URL: https://source.winehq.org/git/wine.git/?a=commit;h=63b66c9955b243e20b280dac236dea4fdf21c92c
Author: Alexandre Julliard <julliard at winehq.org>
Date: Fri Jul 10 10:10:16 2020 +0200
ntdll: Avoid using RtlQueueWorkItem() in the Unix library.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntdll/unix/serial.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/dlls/ntdll/unix/serial.c b/dlls/ntdll/unix/serial.c
index 1c61a5e02f..9454185e17 100644
--- a/dlls/ntdll/unix/serial.c
+++ b/dlls/ntdll/unix/serial.c
@@ -950,7 +950,7 @@ static DWORD check_events(int fd, DWORD mask,
* TIOCMIWAIT only checks modem status line and may not be aborted by a changing mask
*
*/
-static DWORD CALLBACK wait_for_event(LPVOID arg)
+static void CALLBACK wait_for_event(LPVOID arg)
{
async_commio *commio = arg;
int fd, needs_close;
@@ -1008,13 +1008,14 @@ static DWORD CALLBACK wait_for_event(LPVOID arg)
stop_waiting(commio->hDevice);
if (commio->hEvent) NtSetEvent(commio->hEvent, NULL);
free( commio );
- return 0;
+ NtTerminateThread( GetCurrentThread(), 0 );
}
static NTSTATUS wait_on(HANDLE hDevice, int fd, HANDLE hEvent, PIO_STATUS_BLOCK piosb, DWORD* events)
{
async_commio* commio;
NTSTATUS status;
+ HANDLE handle;
if ((status = NtResetEvent(hEvent, NULL)))
return status;
@@ -1086,9 +1087,12 @@ static NTSTATUS wait_on(HANDLE hDevice, int fd, HANDLE hEvent, PIO_STATUS_BLOCK
goto out_now;
}
- /* create the worker for the task */
- status = RtlQueueWorkItem(wait_for_event, commio, 0 /* FIXME */);
+ /* create the worker thread for the task */
+ /* FIXME: should use async I/O instead */
+ status = NtCreateThreadEx( &handle, THREAD_ALL_ACCESS, NULL, GetCurrentProcess(),
+ wait_for_event, commio, 0, 0, 0, 0, NULL );
if (status != STATUS_SUCCESS) goto out_now;
+ NtClose( handle );
return STATUS_PENDING;
#if !defined(TIOCINQ) || (!(defined(TIOCSERGETLSR) && defined(TIOCSER_TEMT)) || !defined(TIOCINQ)) || !defined(TIOCMGET) || !defined(TIOCM_CTS) ||!defined(TIOCM_DSR) || !defined(TIOCM_RNG) || !defined(TIOCM_CAR)
More information about the wine-cvs
mailing list