-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Describe the bug
When I use syslog to test my project, I found there is a bug in error process of GetQueuedCompletionStatus in syslogd.cpp (line 334).
The else branch will never be triggered.
And in this logic if client closed a piep, a work thread will exit.
if (!b || lpo == NULL) {
fKeepLooping = FALSE;
MyErrExit("GetQueuedCompletionState");
break;
}
else if (!b) {
if (pClient) {
if (GetLastError() == ERROR_BROKEN_PIPE) {
LogMessageV(SYELOG_SEVERITY_INFORMATION, "Client closed pipe.");
}
else {
LogMessageV(SYELOG_SEVERITY_ERROR,
"GetQueuedCompletionStatus failed %d [%p]",
GetLastError(), pClient);
}
CloseConnection(pClient);
}
continue;
}
Expected behavior
I thought thread will exit only when both return value is false and lpo is NULL, as description in doc of GetQueuedCompletionStatus:
If a call to GetQueuedCompletionStatus fails because the completion port handle associated with it is closed while the call is outstanding, the function returns FALSE, *lpOverlapped will be NULL, and GetLastError will return ERROR_ABANDONED_WAIT_0.
I will create a PR for it.
Detours version
current master
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working