summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--oslo_utils/eventletutils.py3
-rw-r--r--oslo_utils/tests/test_eventletutils.py12
2 files changed, 13 insertions, 2 deletions
diff --git a/oslo_utils/eventletutils.py b/oslo_utils/eventletutils.py
index f5bca51..46d9ba7 100644
--- a/oslo_utils/eventletutils.py
+++ b/oslo_utils/eventletutils.py
@@ -159,6 +159,9 @@ class _Event(object):
isSet = is_set
def set(self):
+ if self._set:
+ self._event.reset()
+
self._set = True
self._event.send(True)
diff --git a/oslo_utils/tests/test_eventletutils.py b/oslo_utils/tests/test_eventletutils.py
index e5765c7..8e71e81 100644
--- a/oslo_utils/tests/test_eventletutils.py
+++ b/oslo_utils/tests/test_eventletutils.py
@@ -123,8 +123,8 @@ class EventletUtilsTest(test_base.BaseTestCase):
eventletutils.warn_eventlet_not_patched,
['blah.blah'])
- @mock.patch('oslo_utils.eventletutils._Event.clear')
- def test_event_api_compat(self, mock_clear):
+ @mock.patch('oslo_utils.eventletutils._eventlet')
+ def test_event_api_compat(self, mock_eventlet):
with mock.patch('oslo_utils.eventletutils.is_monkey_patched',
return_value=True):
e_event = eventletutils.Event()
@@ -142,3 +142,11 @@ class EventletUtilsTest(test_base.BaseTestCase):
for method in public_methods:
self.assertTrue(hasattr(e_event, method))
+
+ # Ensure set() allows multiple invocations, same as in
+ # threading implementation. Must call reset on underlying
+ # Event before reusing it
+ e_event.set()
+ self.assertEqual(0, mock_eventlet.event.Event().reset.call_count)
+ e_event.set()
+ self.assertEqual(1, mock_eventlet.event.Event().reset.call_count)