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