diff --git a/dlls/ntdll/unix/serial.c b/dlls/ntdll/unix/serial.c index 5af3f9afced..ea9931d891a 100644 --- a/dlls/ntdll/unix/serial.c +++ b/dlls/ntdll/unix/serial.c @@ -452,7 +452,7 @@ static NTSTATUS get_status(int fd, SERIAL_STATUS* ss) return status; } -static NTSTATUS get_wait_mask( HANDLE hDevice, UINT *mask, UINT *cookie, BOOL *pending_write ) +static NTSTATUS get_wait_mask( HANDLE hDevice, UINT *mask, BOOL *pending_write ) { unsigned int status; @@ -463,7 +463,6 @@ static NTSTATUS get_wait_mask( HANDLE hDevice, UINT *mask, UINT *cookie, BOOL *p if (!(status = wine_server_call( req ))) { *mask = reply->eventmask; - if (cookie) *cookie = reply->cookie; if (pending_write) *pending_write = reply->pending_write; } } @@ -967,7 +966,6 @@ typedef struct async_commio struct async_fileio io; DWORD* events; UINT evtmask; - UINT cookie; UINT mstat; BOOL pending_write; serial_irq_info irq_info; @@ -1080,7 +1078,7 @@ static BOOL async_wait_proc( void *user, ULONG_PTR *info, unsigned int *status ) if (!server_get_unix_fd( commio->io.handle, FILE_READ_DATA | FILE_WRITE_DATA, &fd, &needs_close, NULL, NULL )) { serial_irq_info new_irq_info; - UINT new_mstat, dummy, cookie; + UINT new_mstat, dummy; TRACE( "device=%p fd=0x%08x mask=0x%08x buffer=%p irq_info=%p\n", commio->io.handle, fd, commio->evtmask, commio->events, &commio->irq_info ); @@ -1111,18 +1109,9 @@ static BOOL async_wait_proc( void *user, ULONG_PTR *info, unsigned int *status ) } else { - get_wait_mask( commio->io.handle, &dummy, &cookie, (commio->evtmask & EV_TXEMPTY) ? &commio->pending_write : NULL ); - if (commio->cookie != cookie) - { - *commio->events = 0; - *status = STATUS_CANCELLED; - *info = 0; - } - else - { - if (needs_close) close( fd ); - return FALSE; - } + get_wait_mask( commio->io.handle, &dummy, (commio->evtmask & EV_TXEMPTY) ? &commio->pending_write : NULL ); + if (needs_close) close( fd ); + return FALSE; } } @@ -1145,7 +1134,7 @@ static NTSTATUS wait_on( HANDLE handle, int fd, HANDLE event, PIO_APC_ROUTINE ap commio->events = out_buffer; commio->pending_write = 0; - status = get_wait_mask( handle, &commio->evtmask, &commio->cookie, (commio->evtmask & EV_TXEMPTY) ? &commio->pending_write : NULL ); + status = get_wait_mask( handle, &commio->evtmask, (commio->evtmask & EV_TXEMPTY) ? &commio->pending_write : NULL ); if (status) { free( commio ); diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h index 71e28f8eac2..e16f1ceb7c3 100644 --- a/include/wine/server_protocol.h +++ b/include/wine/server_protocol.h @@ -3016,9 +3016,7 @@ struct get_serial_info_reply { struct reply_header __header; unsigned int eventmask; - unsigned int cookie; unsigned int pending_write; - char __pad_20[4]; }; @@ -6533,7 +6531,7 @@ union generic_reply /* ### protocol_version begin ### */ -#define SERVER_PROTOCOL_VERSION 807 +#define SERVER_PROTOCOL_VERSION 808 /* ### protocol_version end ### */ diff --git a/server/protocol.def b/server/protocol.def index b543fdabaae..766674d3e30 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -2245,7 +2245,6 @@ enum message_type int flags; @REPLY unsigned int eventmask; - unsigned int cookie; unsigned int pending_write; @END diff --git a/server/request.h b/server/request.h index acee48c2faf..67de9bb1779 100644 --- a/server/request.h +++ b/server/request.h @@ -1455,9 +1455,8 @@ C_ASSERT( FIELD_OFFSET(struct get_serial_info_request, handle) == 12 ); C_ASSERT( FIELD_OFFSET(struct get_serial_info_request, flags) == 16 ); C_ASSERT( sizeof(struct get_serial_info_request) == 24 ); C_ASSERT( FIELD_OFFSET(struct get_serial_info_reply, eventmask) == 8 ); -C_ASSERT( FIELD_OFFSET(struct get_serial_info_reply, cookie) == 12 ); -C_ASSERT( FIELD_OFFSET(struct get_serial_info_reply, pending_write) == 16 ); -C_ASSERT( sizeof(struct get_serial_info_reply) == 24 ); +C_ASSERT( FIELD_OFFSET(struct get_serial_info_reply, pending_write) == 12 ); +C_ASSERT( sizeof(struct get_serial_info_reply) == 16 ); C_ASSERT( FIELD_OFFSET(struct set_serial_info_request, handle) == 12 ); C_ASSERT( FIELD_OFFSET(struct set_serial_info_request, flags) == 16 ); C_ASSERT( sizeof(struct set_serial_info_request) == 24 ); diff --git a/server/serial.c b/server/serial.c index 2fab9bbe7e6..209f2e9174e 100644 --- a/server/serial.c +++ b/server/serial.c @@ -76,7 +76,6 @@ struct serial struct timeout_user *read_timer; SERIAL_TIMEOUTS timeouts; unsigned int eventmask; - unsigned int generation; /* event mask change counter */ unsigned int pending_write : 1; struct termios original; @@ -141,7 +140,6 @@ struct object *create_serial( struct fd *fd ) serial->read_timer = NULL; serial->eventmask = 0; - serial->generation = 0; serial->pending_write = 0; memset( &serial->timeouts, 0, sizeof(serial->timeouts) ); init_async_queue( &serial->wait_q ); @@ -240,8 +238,7 @@ static void serial_ioctl( struct fd *fd, ioctl_code_t code, struct async *async return; } serial->eventmask = *(unsigned int *)get_req_data(); - serial->generation++; - fd_async_wake_up( serial->fd, ASYNC_TYPE_WAIT, STATUS_SUCCESS ); + async_wake_up( &serial->wait_q, STATUS_CANCELLED ); return; case IOCTL_SERIAL_WAIT_ON_MASK: @@ -335,7 +332,6 @@ DECL_HANDLER(get_serial_info) { /* event mask */ reply->eventmask = serial->eventmask; - reply->cookie = serial->generation; /* pending write */ reply->pending_write = serial->pending_write; diff --git a/server/trace.c b/server/trace.c index 1aa0d5c1518..08adda28230 100644 --- a/server/trace.c +++ b/server/trace.c @@ -2856,7 +2856,6 @@ static void dump_get_serial_info_request( const struct get_serial_info_request * static void dump_get_serial_info_reply( const struct get_serial_info_reply *req ) { fprintf( stderr, " eventmask=%08x", req->eventmask ); - fprintf( stderr, ", cookie=%08x", req->cookie ); fprintf( stderr, ", pending_write=%08x", req->pending_write ); }