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;
! }
}
|