--- src/serial.cpp.org	2007-01-23 17:44:40.000000000 +0100
+++ src/serial.cpp	2007-05-03 11:50:14.301875000 +0200
@@ -925,6 +925,7 @@ bool Serial::isPending(Pending pending, 
 		Thread::Cancel save = Thread::enterCancel();
 		OVERLAPPED ol;
 		DWORD dwMask;
+		DWORD dwEvents = 0;
 		BOOL suc;
 
 		memset(&ol, 0, sizeof(OVERLAPPED));
@@ -939,11 +940,17 @@ bool Serial::isPending(Pending pending, 
 
 		SetCommMask(dev, dwMask);
 		// let's wait for event or timeout
-		if((suc = WaitCommEvent(dev, &dwMask, &ol)) == FALSE) {
+		if((suc = WaitCommEvent(dev, &dwEvents, &ol)) == FALSE) {
 			if(GetLastError() == ERROR_IO_PENDING) {
+				DWORD transferred;
+
 				dwError = WaitForSingleObject(ol.hEvent, timeout);
-				suc = (dwError == WAIT_OBJECT_0);
-				SetCommMask(dev, 0);
+				if (dwError != WAIT_OBJECT_0)
+					SetCommMask(dev, 0);
+
+				suc = GetOverlappedResult(dev, &ol, &transferred, TRUE);
+				if (suc)
+					suc = (dwEvents & dwMask) ? TRUE : FALSE;
 				}
 			else
 				ClearCommError(dev, &dwError, &cs);
