ws2_32: Use STATUS_MORE_PROCESSING_REQUIRED to indicate that the AcceptEx async should not send a completion.
This commit is contained in:
parent
93552cc3df
commit
7e9e8b6b80
|
@ -1706,7 +1706,9 @@ static NTSTATUS WS2_async_accept( void *arg, IO_STATUS_BLOCK *iosb, NTSTATUS sta
|
||||||
if (status != STATUS_PENDING)
|
if (status != STATUS_PENDING)
|
||||||
goto finish;
|
goto finish;
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
/* The APC has finished but no completion should be sent for the operation yet, additional processing
|
||||||
|
* needs to be performed by WS2_async_accept_recv() first. */
|
||||||
|
return STATUS_MORE_PROCESSING_REQUIRED;
|
||||||
|
|
||||||
finish:
|
finish:
|
||||||
iosb->u.Status = status;
|
iosb->u.Status = status;
|
||||||
|
@ -1714,8 +1716,6 @@ finish:
|
||||||
|
|
||||||
if (wsa->user_overlapped->hEvent)
|
if (wsa->user_overlapped->hEvent)
|
||||||
SetEvent(wsa->user_overlapped->hEvent);
|
SetEvent(wsa->user_overlapped->hEvent);
|
||||||
if (wsa->cvalue)
|
|
||||||
WS_AddCompletion( HANDLE2SOCKET(wsa->listen_socket), wsa->cvalue, iosb->u.Status, iosb->Information );
|
|
||||||
|
|
||||||
*apc = ws2_async_accept_apc;
|
*apc = ws2_async_accept_apc;
|
||||||
return status;
|
return status;
|
||||||
|
@ -2046,7 +2046,8 @@ static BOOL WINAPI WS2_AcceptEx(SOCKET listener, SOCKET acceptor, PVOID dest, DW
|
||||||
req->async.callback = wine_server_client_ptr( WS2_async_accept );
|
req->async.callback = wine_server_client_ptr( WS2_async_accept );
|
||||||
req->async.iosb = wine_server_client_ptr( overlapped );
|
req->async.iosb = wine_server_client_ptr( overlapped );
|
||||||
req->async.arg = wine_server_client_ptr( wsa );
|
req->async.arg = wine_server_client_ptr( wsa );
|
||||||
/* We don't set event or completion since we may also have to read */
|
req->async.cvalue = cvalue;
|
||||||
|
/* We don't set event since we may also have to read */
|
||||||
status = wine_server_call( req );
|
status = wine_server_call( req );
|
||||||
}
|
}
|
||||||
SERVER_END_REQ;
|
SERVER_END_REQ;
|
||||||
|
|
|
@ -5494,11 +5494,11 @@ static void test_completion_port(void)
|
||||||
|
|
||||||
bret = GetQueuedCompletionStatus(io_port, &num_bytes, &key, &olp, 100);
|
bret = GetQueuedCompletionStatus(io_port, &num_bytes, &key, &olp, 100);
|
||||||
ok(bret == FALSE, "failed to get completion status %u\n", bret);
|
ok(bret == FALSE, "failed to get completion status %u\n", bret);
|
||||||
todo_wine ok(GetLastError() == ERROR_OPERATION_ABORTED, "Last error was %d\n", GetLastError());
|
ok(GetLastError() == ERROR_OPERATION_ABORTED, "Last error was %d\n", GetLastError());
|
||||||
todo_wine ok(key == 125, "Key is %lu\n", key);
|
ok(key == 125, "Key is %lu\n", key);
|
||||||
todo_wine ok(num_bytes == 0, "Number of bytes transferred is %u\n", num_bytes);
|
ok(num_bytes == 0, "Number of bytes transferred is %u\n", num_bytes);
|
||||||
todo_wine ok(olp == &ov, "Overlapped structure is at %p\n", olp);
|
ok(olp == &ov, "Overlapped structure is at %p\n", olp);
|
||||||
todo_wine ok(olp && (olp->Internal == (ULONG)STATUS_CANCELLED), "Internal status is %lx\n", olp ? olp->Internal : 0);
|
ok(olp && (olp->Internal == (ULONG)STATUS_CANCELLED), "Internal status is %lx\n", olp ? olp->Internal : 0);
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
key = 0xdeadbeef;
|
key = 0xdeadbeef;
|
||||||
|
@ -5537,11 +5537,11 @@ static void test_completion_port(void)
|
||||||
|
|
||||||
bret = GetQueuedCompletionStatus(io_port, &num_bytes, &key, &olp, 100);
|
bret = GetQueuedCompletionStatus(io_port, &num_bytes, &key, &olp, 100);
|
||||||
ok(bret == FALSE, "failed to get completion status %u\n", bret);
|
ok(bret == FALSE, "failed to get completion status %u\n", bret);
|
||||||
todo_wine ok(GetLastError() == ERROR_OPERATION_ABORTED, "Last error was %d\n", GetLastError());
|
ok(GetLastError() == ERROR_OPERATION_ABORTED, "Last error was %d\n", GetLastError());
|
||||||
todo_wine ok(key == 125, "Key is %lu\n", key);
|
ok(key == 125, "Key is %lu\n", key);
|
||||||
todo_wine ok(num_bytes == 0, "Number of bytes transferred is %u\n", num_bytes);
|
ok(num_bytes == 0, "Number of bytes transferred is %u\n", num_bytes);
|
||||||
todo_wine ok(olp == &ov, "Overlapped structure is at %p\n", olp);
|
ok(olp == &ov, "Overlapped structure is at %p\n", olp);
|
||||||
todo_wine ok(olp && (olp->Internal == (ULONG)STATUS_CANCELLED), "Internal status is %lx\n", olp ? olp->Internal : 0);
|
ok(olp && (olp->Internal == (ULONG)STATUS_CANCELLED), "Internal status is %lx\n", olp ? olp->Internal : 0);
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
key = 0xdeadbeef;
|
key = 0xdeadbeef;
|
||||||
|
@ -5596,11 +5596,11 @@ static void test_completion_port(void)
|
||||||
olp = (WSAOVERLAPPED *)0xdeadbeef;
|
olp = (WSAOVERLAPPED *)0xdeadbeef;
|
||||||
bret = GetQueuedCompletionStatus(io_port, &num_bytes, &key, &olp, 100);
|
bret = GetQueuedCompletionStatus(io_port, &num_bytes, &key, &olp, 100);
|
||||||
ok(bret == FALSE, "failed to get completion status %u\n", bret);
|
ok(bret == FALSE, "failed to get completion status %u\n", bret);
|
||||||
todo_wine ok(GetLastError() == ERROR_OPERATION_ABORTED, "Last error was %d\n", GetLastError());
|
ok(GetLastError() == ERROR_OPERATION_ABORTED, "Last error was %d\n", GetLastError());
|
||||||
todo_wine ok(key == 125, "Key is %lu\n", key);
|
ok(key == 125, "Key is %lu\n", key);
|
||||||
todo_wine ok(num_bytes == 0, "Number of bytes transferred is %u\n", num_bytes);
|
ok(num_bytes == 0, "Number of bytes transferred is %u\n", num_bytes);
|
||||||
todo_wine ok(olp == &ov, "Overlapped structure is at %p\n", olp);
|
ok(olp == &ov, "Overlapped structure is at %p\n", olp);
|
||||||
todo_wine ok(olp && olp->Internal == (ULONG)STATUS_CANCELLED, "Internal status is %lx\n", olp ? olp->Internal : 0);
|
ok(olp && olp->Internal == (ULONG)STATUS_CANCELLED, "Internal status is %lx\n", olp ? olp->Internal : 0);
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
key = 0xdeadbeef;
|
key = 0xdeadbeef;
|
||||||
|
@ -5663,11 +5663,11 @@ static void test_completion_port(void)
|
||||||
|
|
||||||
bret = GetQueuedCompletionStatus(io_port, &num_bytes, &key, &olp, 100);
|
bret = GetQueuedCompletionStatus(io_port, &num_bytes, &key, &olp, 100);
|
||||||
ok(bret == FALSE, "failed to get completion status %u\n", bret);
|
ok(bret == FALSE, "failed to get completion status %u\n", bret);
|
||||||
todo_wine ok(GetLastError() == ERROR_OPERATION_ABORTED, "Last error was %d\n", GetLastError());
|
ok(GetLastError() == ERROR_OPERATION_ABORTED, "Last error was %d\n", GetLastError());
|
||||||
todo_wine ok(key == 125, "Key is %lu\n", key);
|
ok(key == 125, "Key is %lu\n", key);
|
||||||
todo_wine ok(num_bytes == 0, "Number of bytes transferred is %u\n", num_bytes);
|
ok(num_bytes == 0, "Number of bytes transferred is %u\n", num_bytes);
|
||||||
todo_wine ok(olp == &ov, "Overlapped structure is at %p\n", olp);
|
ok(olp == &ov, "Overlapped structure is at %p\n", olp);
|
||||||
todo_wine ok(olp && (olp->Internal == (ULONG)STATUS_CANCELLED), "Internal status is %lx\n", olp ? olp->Internal : 0);
|
ok(olp && (olp->Internal == (ULONG)STATUS_CANCELLED), "Internal status is %lx\n", olp ? olp->Internal : 0);
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
key = 0xdeadbeef;
|
key = 0xdeadbeef;
|
||||||
|
@ -5719,11 +5719,11 @@ static void test_completion_port(void)
|
||||||
|
|
||||||
bret = GetQueuedCompletionStatus(io_port, &num_bytes, &key, &olp, 100);
|
bret = GetQueuedCompletionStatus(io_port, &num_bytes, &key, &olp, 100);
|
||||||
ok(bret == FALSE, "failed to get completion status %u\n", bret);
|
ok(bret == FALSE, "failed to get completion status %u\n", bret);
|
||||||
todo_wine ok(GetLastError() == ERROR_OPERATION_ABORTED, "Last error was %d\n", GetLastError());
|
ok(GetLastError() == ERROR_OPERATION_ABORTED, "Last error was %d\n", GetLastError());
|
||||||
todo_wine ok(key == 125, "Key is %lu\n", key);
|
ok(key == 125, "Key is %lu\n", key);
|
||||||
todo_wine ok(num_bytes == 0, "Number of bytes transferred is %u\n", num_bytes);
|
ok(num_bytes == 0, "Number of bytes transferred is %u\n", num_bytes);
|
||||||
todo_wine ok(olp == &ov, "Overlapped structure is at %p\n", olp);
|
ok(olp == &ov, "Overlapped structure is at %p\n", olp);
|
||||||
todo_wine ok(olp && (olp->Internal == (ULONG)STATUS_CANCELLED), "Internal status is %lx\n", olp ? olp->Internal : 0);
|
ok(olp && (olp->Internal == (ULONG)STATUS_CANCELLED), "Internal status is %lx\n", olp ? olp->Internal : 0);
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
key = 0xdeadbeef;
|
key = 0xdeadbeef;
|
||||||
|
|
Loading…
Reference in New Issue