summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--oslo_utils/eventletutils.py4
-rw-r--r--oslo_utils/tests/test_eventletutils.py10
2 files changed, 13 insertions, 1 deletions
diff --git a/oslo_utils/eventletutils.py b/oslo_utils/eventletutils.py
index 30fc41c..5d3c0a6 100644
--- a/oslo_utils/eventletutils.py
+++ b/oslo_utils/eventletutils.py
@@ -150,13 +150,15 @@ class EventletEvent(object):
"""
def __init__(self, *args, **kwargs):
super(EventletEvent, self).__init__()
+ self._set = False
self.clear()
def clear(self):
old_event = getattr(self, "_event", None)
+ was_set = self._set
self._set = False
self._event = _eventlet.event.Event()
- if old_event is not None:
+ if old_event is not None and not was_set:
old_event.send(True)
def is_set(self):
diff --git a/oslo_utils/tests/test_eventletutils.py b/oslo_utils/tests/test_eventletutils.py
index 96205f0..b6ce995 100644
--- a/oslo_utils/tests/test_eventletutils.py
+++ b/oslo_utils/tests/test_eventletutils.py
@@ -200,3 +200,13 @@ class EventletUtilsTest(test_base.BaseTestCase):
b = greenthread.spawn(thread_b)
with eventlet.timeout.Timeout(0.7):
b.wait()
+
+ @mock.patch('oslo_utils.eventletutils._eventlet.event.Event')
+ def test_event_clear_already_sent(self, mock_event):
+ old_event = mock.Mock()
+ new_event = mock.Mock()
+ mock_event.side_effect = [old_event, new_event]
+ event = eventletutils.EventletEvent()
+ event.set()
+ event.clear()
+ self.assertEqual(1, old_event.send.call_count)