diff options
author | Pete Batard <pbatard@gmail.com> | 2010-03-19 16:39:31 +0000 |
---|---|---|
committer | Pete Batard <pbatard@gmail.com> | 2010-03-19 16:39:31 +0000 |
commit | 0758c0d9a9c6e26028dff3aff6fa3ed0b641f9c3 (patch) | |
tree | b2a8392bbe140a7dfbf277b8be916594407722bd /libusb/os/poll_windows.c | |
parent | 585cfa46f34260ea22e0280db588442f01b5056c (diff) | |
download | libusb-0758c0d9a9c6e26028dff3aff6fa3ed0b641f9c3.tar.gz |
fixed non duplicated overlapped event in usbi_pipe()r218
prevents MSVC debug from complaining about invalid handle on CloseHandle()
Diffstat (limited to 'libusb/os/poll_windows.c')
-rw-r--r-- | libusb/os/poll_windows.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/libusb/os/poll_windows.c b/libusb/os/poll_windows.c index e03fe1c..645338a 100644 --- a/libusb/os/poll_windows.c +++ b/libusb/os/poll_windows.c @@ -335,7 +335,12 @@ int usbi_pipe(int filedes[2]) if(!overlapped[0]->hEvent) { goto out3; } - overlapped[1]->hEvent = overlapped[0]->hEvent; + // If we don't duplicate the event handle, MSVC's debug mode will complain on CloseHandle + if (!DuplicateHandle(GetCurrentProcess(), overlapped[0]->hEvent, + GetCurrentProcess(), &overlapped[1]->hEvent, 0, TRUE, DUPLICATE_SAME_ACCESS)) { + usbi_err(NULL, "failed to duplicate pipe overlapped event handle: errcode %d", (int)GetLastError()); + goto out4; + } for (i=0, j=0; i<MAX_FDS; i++) { if (poll_fd[i].fd < 0) { @@ -358,6 +363,8 @@ int usbi_pipe(int filedes[2]) } } + CloseHandle(overlapped[1]->hEvent); +out4: CloseHandle(overlapped[0]->hEvent); out3: CloseHandle(handle[1]); @@ -790,7 +797,7 @@ int usbi_close(int fd) errno = EBADF; } else { if (poll_fd[index].overlapped != NULL) { - // Shouldn't matter if we close the event twice + // Must be a different event for each end of the pipe CloseHandle(poll_fd[index].overlapped->hEvent); free(poll_fd[index].overlapped); } @@ -878,4 +885,4 @@ ssize_t usbi_read(int fd, void *buf, size_t count) out: LeaveCriticalSection(&_poll_fd[index].mutex); return r; -} +}
\ No newline at end of file |