BIND 10 trac3050, updated. 35f65cf6f3644e5bc97d058ceffe87b2253305be [3050] Always clear "skip" flag before calling any callouts on a hook

BIND 10 source code commits bind10-changes at lists.isc.org
Wed Jul 24 12:55:43 UTC 2013


The branch, trac3050 has been updated
       via  35f65cf6f3644e5bc97d058ceffe87b2253305be (commit)
      from  c845a96005b28acde2d62a93ee8c046162da4cb4 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 35f65cf6f3644e5bc97d058ceffe87b2253305be
Author: Stephen Morris <stephen at isc.org>
Date:   Wed Jul 24 13:53:50 2013 +0100

    [3050] Always clear "skip" flag before calling any callouts on a hook

-----------------------------------------------------------------------

Summary of changes:
 src/lib/hooks/callout_manager.cc        |    8 +++++---
 src/lib/hooks/tests/handles_unittest.cc |   18 ++++++++++++++++++
 2 files changed, 23 insertions(+), 3 deletions(-)

-----------------------------------------------------------------------
diff --git a/src/lib/hooks/callout_manager.cc b/src/lib/hooks/callout_manager.cc
index 5a2126a..df27f45 100644
--- a/src/lib/hooks/callout_manager.cc
+++ b/src/lib/hooks/callout_manager.cc
@@ -113,13 +113,15 @@ CalloutManager::calloutsPresent(int hook_index) const {
 void
 CalloutManager::callCallouts(int hook_index, CalloutHandle& callout_handle) {
 
+    // Clear the "skip" flag so we don't carry state from a previous call.
+    // This is done regardless of whether callouts are present to avoid passing
+    // any state from the previous call of callCallouts().
+    callout_handle.setSkip(false);
+
     // Only initialize and iterate if there are callouts present.  This check
     // also catches the case of an invalid index.
     if (calloutsPresent(hook_index)) {
 
-        // Clear the "skip" flag so we don't carry state from a previous call.
-        callout_handle.setSkip(false);
-
         // Set the current hook index.  This is used should a callout wish to
         // determine to what hook it is attached.
         current_hook_ = hook_index;
diff --git a/src/lib/hooks/tests/handles_unittest.cc b/src/lib/hooks/tests/handles_unittest.cc
index e5364bc..c19dff2 100644
--- a/src/lib/hooks/tests/handles_unittest.cc
+++ b/src/lib/hooks/tests/handles_unittest.cc
@@ -841,6 +841,24 @@ TEST_F(HandlesTest, ReturnSkipClear) {
     EXPECT_FALSE(callout_handle.getSkip());
 }
 
+// Check that the skip flag is cleared when callouts are called - even if
+// there are no callouts.
+
+TEST_F(HandlesTest, NoCalloutsSkipTest) {
+    // Note - no callouts are registered on any hook.
+    CalloutHandle callout_handle(getCalloutManager());
+
+    // Clear the skip flag and call a hook with no callouts.
+    callout_handle.setSkip(false);
+    getCalloutManager()->callCallouts(alpha_index_, callout_handle);
+    EXPECT_FALSE(callout_handle.getSkip());
+
+    // Set the skip flag and call a hook with no callouts.
+    callout_handle.setSkip(true);
+    getCalloutManager()->callCallouts(alpha_index_, callout_handle);
+    EXPECT_FALSE(callout_handle.getSkip());
+}
+
 // The next set of callouts do a similar thing to the above "skip" tests,
 // but alter the value of a string argument.  This is for testing that the
 // a callout is able to change an argument and return it to the caller.



More information about the bind10-changes mailing list