Author: tross
Date: Mon Nov 12 15:51:37 2012
New Revision: 1408333

URL: http://svn.apache.org/viewvc?rev=1408333&view=rev
Log:
PROTON-125 - Now more properly fixed.
API change:  pn_driver_wait now returns an error code rather than exiting the 
process.

Modified:
    qpid/proton/trunk/proton-c/include/proton/driver.h
    qpid/proton/trunk/proton-c/src/driver.c
    qpid/proton/trunk/proton-c/src/messenger.c

Modified: qpid/proton/trunk/proton-c/include/proton/driver.h
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/include/proton/driver.h?rev=1408333&r1=1408332&r2=1408333&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/include/proton/driver.h (original)
+++ qpid/proton/trunk/proton-c/include/proton/driver.h Mon Nov 12 15:51:37 2012
@@ -99,8 +99,10 @@ int pn_driver_wakeup(pn_driver_t *driver
  * @param[in] driver the driver to wait on
  * @param[in] timeout maximum time in milliseconds to wait, -1 means
  *                    infinite wait
+ *
+ * @return zero on success, an error code on failure
  */
-void pn_driver_wait(pn_driver_t *driver, int timeout);
+int pn_driver_wait(pn_driver_t *driver, int timeout);
 
 /** Get the next listener with pending data in the driver.
  *

Modified: qpid/proton/trunk/proton-c/src/driver.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/driver.c?rev=1408333&r1=1408332&r2=1408333&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/driver.c (original)
+++ qpid/proton/trunk/proton-c/src/driver.c Mon Nov 12 15:51:37 2012
@@ -731,9 +731,11 @@ void pn_driver_wait_1(pn_driver_t *d)
   pn_driver_rebuild(d);
 }
 
-void pn_driver_wait_2(pn_driver_t *d, int timeout)
+int pn_driver_wait_2(pn_driver_t *d, int timeout)
 {
-  DIE_IFE(poll(d->fds, d->nfds, d->closed_count > 0 ? 0 : timeout));
+    if (poll(d->fds, d->nfds, d->closed_count > 0 ? 0 : timeout) == -1)
+        return pn_error_from_errno(d->error, "poll");
+    return 0;
 }
 
 void pn_driver_wait_3(pn_driver_t *d)
@@ -778,11 +780,14 @@ void pn_driver_wait_3(pn_driver_t *d)
 //       This workaround will eventually be replaced by a more elegant solution
 //       to the problem.
 //
-void pn_driver_wait(pn_driver_t *d, int timeout)
+int pn_driver_wait(pn_driver_t *d, int timeout)
 {
     pn_driver_wait_1(d);
-    pn_driver_wait_2(d, timeout);
+    int error = pn_driver_wait_2(d, timeout);
+    if (error)
+        return error;
     pn_driver_wait_3(d);
+    return 0;
 }
 
 pn_listener_t *pn_driver_listener(pn_driver_t *d) {

Modified: qpid/proton/trunk/proton-c/src/messenger.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/messenger.c?rev=1408333&r1=1408332&r2=1408333&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/messenger.c (original)
+++ qpid/proton/trunk/proton-c/src/messenger.c Mon Nov 12 15:51:37 2012
@@ -488,7 +488,9 @@ int pn_messenger_tsync(pn_messenger_t *m
     int remaining = deadline - millis(now);
     if (pred || (timeout >= 0 && remaining < 0)) break;
 
-    pn_driver_wait(messenger->driver, remaining);
+    int error = pn_driver_wait(messenger->driver, remaining);
+    if (error)
+        return error;
 
     pn_listener_t *l;
     while ((l = pn_driver_listener(messenger->driver))) {



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to