summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/sys/windows/IocpPoller.cpp
diff options
context:
space:
mode:
authorStephen D. Huston <shuston@apache.org>2009-01-12 23:31:49 +0000
committerStephen D. Huston <shuston@apache.org>2009-01-12 23:31:49 +0000
commit968d7fd6a2edb1f99ffab980d8130abbd854adc5 (patch)
treef3ccf11c71900cd2c2dc1a27592bc9e71c7b9486 /cpp/src/qpid/sys/windows/IocpPoller.cpp
parent081b523538d7731c4c0128f90a6393720a7d4ecc (diff)
downloadqpid-python-968d7fd6a2edb1f99ffab980d8130abbd854adc5.tar.gz
Add support for AsynchIO::RequestCallback processing
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@733966 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/sys/windows/IocpPoller.cpp')
-rwxr-xr-xcpp/src/qpid/sys/windows/IocpPoller.cpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/cpp/src/qpid/sys/windows/IocpPoller.cpp b/cpp/src/qpid/sys/windows/IocpPoller.cpp
index d23dafcd6e..1e24adfb46 100755
--- a/cpp/src/qpid/sys/windows/IocpPoller.cpp
+++ b/cpp/src/qpid/sys/windows/IocpPoller.cpp
@@ -43,16 +43,19 @@ class PollerHandlePrivate {
SOCKET fd;
AsynchIoResult::Completer cb;
+ AsynchIO::RequestCallback cbRequest;
- PollerHandlePrivate(SOCKET f, AsynchIoResult::Completer cb0 = 0) :
- fd(f), cb(cb0)
+ PollerHandlePrivate(SOCKET f,
+ AsynchIoResult::Completer cb0 = 0,
+ AsynchIO::RequestCallback rcb = 0)
+ : fd(f), cb(cb0), cbRequest(rcb)
{
}
};
PollerHandle::PollerHandle(const IOHandle& h) :
- impl(new PollerHandlePrivate(toFd(h.impl), h.impl->event))
+ impl(new PollerHandlePrivate(toFd(h.impl), h.impl->event, h.impl->cbRequest))
{}
PollerHandle::~PollerHandle() {
@@ -114,8 +117,19 @@ void Poller::addFd(PollerHandle& handle, Direction dir) {
QPID_WINDOWS_CHECK_NULL(iocpHandle);
}
else {
- AsynchWriteWanted *result = new AsynchWriteWanted(handle.impl->cb);
- PostQueuedCompletionStatus(impl->iocp, 0, 0, result->overlapped());
+ // INPUT is used to request a callback; OUTPUT to request a write
+ assert(dir == Poller::INPUT || dir == Poller::OUTPUT);
+
+ if (dir == Poller::OUTPUT) {
+ AsynchWriteWanted *result = new AsynchWriteWanted(handle.impl->cb);
+ PostQueuedCompletionStatus(impl->iocp, 0, 0, result->overlapped());
+ }
+ else {
+ AsynchCallbackRequest *result =
+ new AsynchCallbackRequest(handle.impl->cb,
+ handle.impl->cbRequest);
+ PostQueuedCompletionStatus(impl->iocp, 0, 0, result->overlapped());
+ }
}
}