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