mpm_winnt: clear OVERLAPPED structs before reuse
MSDN documentation states that
Any unused members of [an OVERLAPPED] structure should always be
initialized to zero before the structure is used in a function call.
Otherwise, the function may fail and return ERROR_INVALID_PARAMETER.
Prior to this patch, the internal state left over from previous
overlapped I/O was passed into the next call. It's unclear what effect
this might have, if any. (I have not personally witnessed an
ERROR_INVALID_PARAMETER myself.)
Submitted by: jchampion
Reviewed/backported by: jim
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@
1759470 13f79535-47bb-0310-9956-
ffa450edef68
2.4.x patch: trunk works (modulo CHANGES and APLOGNO's next-number)
+1: jchampion, wrowe, covener
- * mpm_winnt: always zero out OVERLAPPED structs when recycling them.
- trunk patch: http://svn.apache.org/r1758310
- 2.4.x patch: trunk works
- +1: jchampion, wrowe, covener
-
PATCHES PROPOSED TO BACKPORT FROM TRUNK:
[ New proposals should be added at the end of the list ]
* state so -don't- close it.
*/
if (context) {
+ HANDLE saved_event;
+
apr_pool_clear(context->ptrans);
context->ba = apr_bucket_alloc_create(context->ptrans);
context->next = NULL;
+
+ saved_event = context->overlapped.hEvent;
+ memset(&context->overlapped, 0, sizeof(context->overlapped));
+ context->overlapped.hEvent = saved_event;
ResetEvent(context->overlapped.hEvent);
+
apr_thread_mutex_lock(qlock);
if (qtail) {
qtail->next = context;