server: Don't wake up always-blocking asyncs.

Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zebediah Figura 2021-09-03 23:11:42 -05:00 committed by Alexandre Julliard
parent 386c4bcf2f
commit a1c42293a2
5 changed files with 12 additions and 12 deletions

View File

@ -1169,15 +1169,15 @@ static void test_blocking_irp(void)
memset(&io, 0xcc, sizeof(io));
status = NtQueryVolumeInformationFile(file, &io, buffer, sizeof(buffer), FileFsSizeInformation);
todo_wine ok(!status, "got %#x\n", status);
todo_wine ok(!io.Status, "got iosb status %#x\n", io.Status);
todo_wine ok(!io.Information, "got information %#Ix\n", io.Information);
ok(!status, "got %#x\n", status);
ok(!io.Status, "got iosb status %#x\n", io.Status);
ok(!io.Information, "got information %#Ix\n", io.Information);
memset(&io, 0xcc, sizeof(io));
status = NtQueryVolumeInformationFile(file, &io, buffer, sizeof(buffer), FileFsFullSizeInformation);
todo_wine ok(status == STATUS_DEVICE_NOT_READY, "got %#x\n", status);
todo_wine ok(io.Status == STATUS_DEVICE_NOT_READY, "got iosb status %#x\n", io.Status);
todo_wine ok(!io.Information, "got information %#Ix\n", io.Information);
ok(status == STATUS_DEVICE_NOT_READY, "got %#x\n", status);
ok(io.Status == STATUS_DEVICE_NOT_READY, "got iosb status %#x\n", io.Status);
ok(!io.Information, "got information %#Ix\n", io.Information);
CloseHandle(file);
}

View File

@ -285,13 +285,13 @@ struct async *create_async( struct fd *fd, struct thread *thread, const async_da
return async;
}
void set_async_pending( struct async *async, int signal )
void set_async_pending( struct async *async )
{
if (!async->terminated)
{
async->pending = 1;
async->unknown_status = 0;
if (signal && !async->signaled)
if (!async->blocking && !async->signaled)
{
async->signaled = 1;
wake_up( &async->obj, 0 );

View File

@ -961,7 +961,7 @@ DECL_HANDLER(get_next_device_request)
* so we need to do it now */
cancel_irp_call( irp );
else if (irp->async)
set_async_pending( irp->async, irp->file && is_fd_overlapped( irp->file->fd ) );
set_async_pending( irp->async );
free_irp_params( irp );
release_object( irp );

View File

@ -229,7 +229,7 @@ extern void async_set_timeout( struct async *async, timeout_t timeout, unsigned
extern void async_set_result( struct object *obj, unsigned int status, apc_param_t total );
extern void async_set_completion_callback( struct async *async, async_completion_callback func, void *private );
extern void async_set_unknown_status( struct async *async );
extern void set_async_pending( struct async *async, int signal );
extern void set_async_pending( struct async *async );
extern int async_waiting( struct async_queue *queue );
extern void async_terminate( struct async *async, unsigned int status );
extern void async_request_complete( struct async *async, unsigned int status, data_size_t result,

View File

@ -2399,7 +2399,7 @@ static void sock_ioctl( struct fd *fd, ioctl_code_t code, struct async *async )
obj_handle_t event_handle;
int mask;
set_async_pending( async, 0 );
set_async_pending( async );
if (is_machine_64bit( current->process->machine ))
{
@ -2530,7 +2530,7 @@ static void sock_ioctl( struct fd *fd, ioctl_code_t code, struct async *async )
#endif
}
set_async_pending( async, 0 );
set_async_pending( async );
if (bind( unix_fd, &bind_addr.addr, unix_len ) < 0)
{