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]