Skip to content

Commit 97d52a2

Browse files
authored
on_config_changed lock fix: recursive lock in configservice (#82)
1 parent 43cd013 commit 97d52a2

2 files changed

Lines changed: 12 additions & 2 deletions

File tree

configcatclient/configservice.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import hashlib
2-
from threading import Thread, Event, Lock
2+
from threading import Thread, Event, RLock
33

44
from . import utils
55
from .config import FEATURE_FLAGS, CONFIG_FILE_NAME, SERIALIZATION_FORMAT_VERSION
@@ -21,7 +21,7 @@ def __init__(self, sdk_key, polling_mode, hooks, config_fetcher, log, config_cac
2121
self._is_offline = is_offline
2222
self._response_future = None
2323
self._initialized = Event()
24-
self._lock = Lock()
24+
self._lock = RLock()
2525
self._ongoing_fetch = False
2626
self._fetch_finished = Event()
2727
self._start_time = utils.get_utc_now()

configcatclienttests/test_hooks.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,16 @@ def test_callback_exception(self):
137137
value = client.get_value('', 'default')
138138
self.assertEqual('default', value)
139139

140+
def test_callback_config_changed(self):
141+
def on_flag_changed(config):
142+
value = client.get_value('testStringKey', '')
143+
self.assertEqual(TEST_OBJECT[FEATURE_FLAGS]['testStringKey'], value)
144+
145+
hooks = Hooks(on_config_changed=on_flag_changed)
146+
config_cache = ConfigCacheMock()
147+
client = ConfigCatClient.get(TEST_SDK_KEY, ConfigCatOptions(polling_mode=PollingMode.manual_poll(), config_cache=config_cache, hooks=hooks))
148+
client.force_refresh()
149+
140150

141151
if __name__ == '__main__':
142152
unittest.main()

0 commit comments

Comments
 (0)