You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by cl...@apache.org on 2014/09/29 18:37:10 UTC
svn commit: r1628215 - /qpid/proton/trunk/proton-c/src/windows/selector.c
Author: cliffjansen
Date: Mon Sep 29 16:37:09 2014
New Revision: 1628215
URL: http://svn.apache.org/r1628215
Log:
PROTON-702: mark interest in timer based on existence of deadline, not change in deadline
Modified:
qpid/proton/trunk/proton-c/src/windows/selector.c
Modified: qpid/proton/trunk/proton-c/src/windows/selector.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/windows/selector.c?rev=1628215&r1=1628214&r2=1628215&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/windows/selector.c (original)
+++ qpid/proton/trunk/proton-c/src/windows/selector.c Mon Sep 29 16:37:09 2014
@@ -162,6 +162,9 @@ void pn_selector_update(pn_selector_t *s
if (pn_selectable_pending(selectable) > 0) {
interests |= PN_WRITABLE;
}
+ if (selector->deadlines[idx]) {
+ interests |= PN_EXPIRED;
+ }
interests_update(iocpd, interests);
deadlines_update(iocpd, selector->deadlines[idx]);
}
@@ -245,13 +248,13 @@ int pn_selector_select(pn_selector_t *se
selector->current = 0;
selector->awoken = now;
- selector->current_triggered = selector->triggered_list_head;
for (iocpdesc_t *iocpd = selector->deadlines_head; iocpd; iocpd = iocpd->deadlines_next) {
if (iocpd->deadline <= now)
pni_events_update(iocpd, iocpd->events | PN_EXPIRED);
else
break;
}
+ selector->current_triggered = selector->triggered_list_head;
return pn_error_code(selector->error);
}
@@ -332,18 +335,17 @@ static void deadlines_update(iocpdesc_t
{
if (deadline == iocpd->deadline)
return;
+
iocpd->deadline = deadline;
pn_selector_t *selector = iocpd->selector;
if (!deadline) {
deadlines_remove(selector, iocpd);
pni_events_update(iocpd, iocpd->events & ~PN_EXPIRED);
- interests_update(iocpd, iocpd->interests & ~PN_EXPIRED);
} else {
if (iocpd->deadlines_prev || selector->deadlines_head == iocpd) {
deadlines_remove(selector, iocpd);
pni_events_update(iocpd, iocpd->events & ~PN_EXPIRED);
}
- interests_update(iocpd, iocpd->interests | PN_EXPIRED);
iocpdesc_t *dl_iocpd = LL_HEAD(selector, deadlines);
while (dl_iocpd && dl_iocpd->deadline <= deadline)
dl_iocpd = dl_iocpd->deadlines_next;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org