Browse Source

[master] Merge branch 'trac3050'

Stephen Morris 11 years ago
parent
commit
ff0b9b4586
2 changed files with 23 additions and 3 deletions
  1. 5 3
      src/lib/hooks/callout_manager.cc
  2. 18 0
      src/lib/hooks/tests/handles_unittest.cc

+ 5 - 3
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;

+ 18 - 0
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.