[Com0com-cvs] com0com/sys startirp.c,1.13,1.14
The virtual serial port driver for Windows.
Brought to you by:
vfrolov
From: Vyacheslav F. <vf...@us...> - 2007-01-15 16:09:26
|
Update of /cvsroot/com0com/com0com/sys In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv26111 Modified Files: startirp.c Log Message: Fixed non zero Information for IOCTL_SERIAL_IMMEDIATE_CHAR Index: startirp.c =================================================================== RCS file: /cvsroot/com0com/com0com/sys/startirp.c,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** startirp.c 28 Jun 2006 13:52:09 -0000 1.13 --- startirp.c 15 Jan 2007 16:09:16 -0000 1.14 *************** *** 2,6 **** * $Id$ * ! * Copyright (c) 2004-2006 Vyacheslav Frolov * * This program is free software; you can redistribute it and/or modify --- 2,6 ---- * $Id$ * ! * Copyright (c) 2004-2007 Vyacheslav Frolov * * This program is free software; you can redistribute it and/or modify *************** *** 20,23 **** --- 20,26 ---- * * $Log$ + * Revision 1.14 2007/01/15 16:09:16 vfrolov + * Fixed non zero Information for IOCTL_SERIAL_IMMEDIATE_CHAR + * * Revision 1.13 2006/06/28 13:52:09 vfrolov * Fixed double-release of spin lock *************** *** 208,211 **** --- 211,215 ---- PC0C_IRP_STATE pState; PLIST_ENTRY pListEntry; + PIO_STACK_LOCATION pIrpStack; pListEntry = RemoveHeadList(pQueueToComplete); *************** *** 229,234 **** } ! if (pIrp->IoStatus.Status == STATUS_CANCELLED) pIrp->IoStatus.Information = 0; IoCompleteRequest(pIrp, IO_SERIAL_INCREMENT); --- 233,244 ---- } ! pIrpStack = IoGetCurrentIrpStackLocation(pIrp); ! ! if (pIrp->IoStatus.Status == STATUS_CANCELLED || ! (pIrpStack->MajorFunction == IRP_MJ_DEVICE_CONTROL && ! pIrpStack->Parameters.DeviceIoControl.IoControlCode == IOCTL_SERIAL_IMMEDIATE_CHAR)) ! { pIrp->IoStatus.Information = 0; + } IoCompleteRequest(pIrp, IO_SERIAL_INCREMENT); *************** *** 283,289 **** status = NoPending(pIrp, status); ! if (pState->iQueue == C0C_QUEUE_WRITE && status != STATUS_PENDING) { ! pIoPort->amountInWriteQueue -= ! GetWriteLength(pIrp) - (ULONG)pIrp->IoStatus.Information; } --- 293,312 ---- status = NoPending(pIrp, status); ! if (status != STATUS_PENDING) { ! PIO_STACK_LOCATION pIrpStack; ! ! if (pState->iQueue == C0C_QUEUE_WRITE) { ! pIoPort->amountInWriteQueue -= ! GetWriteLength(pIrp) - (ULONG)pIrp->IoStatus.Information; ! } ! ! pIrpStack = IoGetCurrentIrpStackLocation(pIrp); ! ! if (status == STATUS_CANCELLED || ! (pIrpStack->MajorFunction == IRP_MJ_DEVICE_CONTROL && ! pIrpStack->Parameters.DeviceIoControl.IoControlCode == IOCTL_SERIAL_IMMEDIATE_CHAR)) ! { ! pIrp->IoStatus.Information = 0; ! } } |