diff --git a/src/serialport/qserialport_win.cpp b/src/serialport/qserialport_win.cpp
index a43e620a8153d5a77f9e148b2b1e87cd02f9ae79..5a2cf8ebe41dd89de3f09d7e51ff3ce09483ff88 100644
--- a/src/serialport/qserialport_win.cpp
+++ b/src/serialport/qserialport_win.cpp
@@ -518,7 +518,7 @@ bool QSerialPortPrivate::setDataErrorPolicy(QSerialPort::DataErrorPolicy policy)
 
 bool QSerialPortPrivate::_q_completeAsyncCommunication()
 {
-    if (handleOverlappedResult(0, communicationOverlapped) == qint64(-1))
+    if (overlappedResult(communicationOverlapped) == qint64(-1))
         return false;
     if (EV_ERR & triggeredEventMask)
         handleLineStatusErrors();
@@ -528,7 +528,7 @@ bool QSerialPortPrivate::_q_completeAsyncCommunication()
 
 bool QSerialPortPrivate::_q_completeAsyncRead()
 {
-    const qint64 bytesTransferred = handleOverlappedResult(QSerialPort::Input, readCompletionOverlapped);
+    const qint64 bytesTransferred = overlappedResult(readCompletionOverlapped);
     if (bytesTransferred == qint64(-1)) {
         readStarted = false;
         return false;
@@ -553,7 +553,7 @@ bool QSerialPortPrivate::_q_completeAsyncWrite()
     Q_Q(QSerialPort);
 
     if (writeStarted) {
-        const qint64 bytesTransferred = handleOverlappedResult(QSerialPort::Output, writeCompletionOverlapped);
+        const qint64 bytesTransferred = overlappedResult(writeCompletionOverlapped);
         if (bytesTransferred == qint64(-1)) {
             writeStarted = false;
             return false;
@@ -809,7 +809,7 @@ bool QSerialPortPrivate::updateCommTimeouts()
     return true;
 }
 
-qint64 QSerialPortPrivate::handleOverlappedResult(int direction, OVERLAPPED &overlapped)
+qint64 QSerialPortPrivate::overlappedResult(OVERLAPPED &overlapped)
 {
     Q_Q(QSerialPort);
 
@@ -819,9 +819,9 @@ qint64 QSerialPortPrivate::handleOverlappedResult(int direction, OVERLAPPED &ove
         if (error == QSerialPort::NoError)
             return qint64(0);
         if (error != QSerialPort::ResourceError) {
-            if (direction == QSerialPort::Input)
+            if (&overlapped == &readCompletionOverlapped)
                 q->setError(QSerialPort::ReadError);
-            else if (direction == QSerialPort::Output)
+            else if (&overlapped == &writeCompletionOverlapped)
                 q->setError(QSerialPort::WriteError);
             else
                 q->setError(error);
diff --git a/src/serialport/qserialport_win_p.h b/src/serialport/qserialport_win_p.h
index 6b009fe6ed1f6fadcce4665f5f04a29a98e8b456..78529e8f4079aaa362fc8dced3ff3fe8cac84620 100644
--- a/src/serialport/qserialport_win_p.h
+++ b/src/serialport/qserialport_win_p.h
@@ -141,7 +141,7 @@ private:
     bool initialize(QIODevice::OpenMode mode);
     bool updateDcb();
     bool updateCommTimeouts();
-    qint64 handleOverlappedResult(int direction, OVERLAPPED &overlapped);
+    qint64 overlappedResult(OVERLAPPED &overlapped);
 
     bool waitAnyEvent(int msecs, bool *timedOut, HANDLE *triggeredEvent);