You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rh...@apache.org on 2015/01/22 04:29:16 UTC
qpid-proton git commit: check for errors on accept
Repository: qpid-proton
Updated Branches:
refs/heads/master 2a784f41f -> c18484e2f
check for errors on accept
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/c18484e2
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/c18484e2
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/c18484e2
Branch: refs/heads/master
Commit: c18484e2f5869a10c6270839c53c97e8bc47a25f
Parents: 2a784f4
Author: Rafael Schloming <rh...@alum.mit.edu>
Authored: Wed Jan 21 22:29:00 2015 -0500
Committer: Rafael Schloming <rh...@alum.mit.edu>
Committed: Wed Jan 21 22:29:00 2015 -0500
----------------------------------------------------------------------
proton-c/bindings/python/proton/__init__.py | 3 +++
proton-c/bindings/python/proton/reactors.py | 7 +++++--
proton-c/src/posix/selector.c | 6 ++++++
proton-c/src/reactor/acceptor.c | 5 ++++-
4 files changed, 18 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/c18484e2/proton-c/bindings/python/proton/__init__.py
----------------------------------------------------------------------
diff --git a/proton-c/bindings/python/proton/__init__.py b/proton-c/bindings/python/proton/__init__.py
index 17cc670..d07fb6f 100644
--- a/proton-c/bindings/python/proton/__init__.py
+++ b/proton-c/bindings/python/proton/__init__.py
@@ -1225,6 +1225,9 @@ indicate whether the fd has been registered or not.
def is_terminal(self):
return pn_selectable_is_terminal(self._impl)
+ def terminate(self):
+ pn_selectable_terminate(self._impl)
+
def release(self):
pn_selectable_release(self._impl)
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/c18484e2/proton-c/bindings/python/proton/reactors.py
----------------------------------------------------------------------
diff --git a/proton-c/bindings/python/proton/reactors.py b/proton-c/bindings/python/proton/reactors.py
index 5e24269..48eb100 100644
--- a/proton-c/bindings/python/proton/reactors.py
+++ b/proton-c/bindings/python/proton/reactors.py
@@ -924,9 +924,12 @@ class Reactor(Wrapper):
def acceptor(self, host, port, handler=None):
impl = _chandler(handler, self.errors)
- result = Acceptor(pn_reactor_acceptor(self._impl, host, port, impl))
+ aimpl = pn_reactor_acceptor(self._impl, host, str(port), impl)
pn_decref(impl)
- return result
+ if aimpl:
+ return Acceptor(aimpl)
+ else:
+ raise IOError(pn_error_text(pn_io_error(pn_reactor_io(self._impl))))
def connection(self, handler=None):
impl = _chandler(handler, self.errors)
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/c18484e2/proton-c/src/posix/selector.c
----------------------------------------------------------------------
diff --git a/proton-c/src/posix/selector.c b/proton-c/src/posix/selector.c
index fa38d1c..db82f11 100644
--- a/proton-c/src/posix/selector.c
+++ b/proton-c/src/posix/selector.c
@@ -183,6 +183,12 @@ pn_selectable_t *pn_selector_next(pn_selector_t *selector, int *events)
if (pfd->revents & POLLIN) {
ev |= PN_READABLE;
}
+ if ((pfd->revents & POLLERR) ||
+ (pfd->revents & POLLHUP) ||
+ (pfd->revents & POLLNVAL)) {
+ ev |= PN_READABLE;
+ ev |= PN_WRITABLE;
+ }
if (pfd->revents & POLLOUT) {
ev |= PN_WRITABLE;
}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/c18484e2/proton-c/src/reactor/acceptor.c
----------------------------------------------------------------------
diff --git a/proton-c/src/reactor/acceptor.c b/proton-c/src/reactor/acceptor.c
index 2ca1b1a..405d372 100644
--- a/proton-c/src/reactor/acceptor.c
+++ b/proton-c/src/reactor/acceptor.c
@@ -54,8 +54,11 @@ void pni_acceptor_finalize(pn_selectable_t *sel) {
}
pn_acceptor_t *pn_reactor_acceptor(pn_reactor_t *reactor, const char *host, const char *port, pn_handler_t *handler) {
- pn_selectable_t *sel = pn_reactor_selectable(reactor);
pn_socket_t socket = pn_listen(pn_reactor_io(reactor), host, port);
+ if (socket == PN_INVALID_SOCKET) {
+ return NULL;
+ }
+ pn_selectable_t *sel = pn_reactor_selectable(reactor);
pn_selectable_set_fd(sel, socket);
pn_selectable_on_readable(sel, pni_acceptor_readable);
pn_selectable_on_finalize(sel, pni_acceptor_finalize);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org