Skip to content

Commit e21aa3d

Browse files
fix: Fix race condition in value change listener registration
Move add_flag_value_change_listener inside the lock block so the old listener is removed before the new one is registered, preventing brief duplicate firing when re-registering with the same listener ID. Co-Authored-By: mkeeler@launchdarkly.com <keelerm84@gmail.com>
1 parent 095913a commit e21aa3d

File tree

1 file changed

+1
-2
lines changed

1 file changed

+1
-2
lines changed

contract-tests/flag_change_listener.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,11 @@ def on_value_change(change: FlagValueChange):
6363

6464
# add_flag_value_change_listener returns the underlying listener
6565
# that must be passed to remove_listener to unsubscribe
66-
underlying_listener = self._tracker.add_flag_value_change_listener(flag_key, context, on_value_change)
67-
6866
with self._lock:
6967
if listener_id in self._listeners:
7068
self._tracker.remove_listener(self._listeners[listener_id])
7169

70+
underlying_listener = self._tracker.add_flag_value_change_listener(flag_key, context, on_value_change)
7271
self._listeners[listener_id] = underlying_listener
7372

7473
def unregister(self, listener_id: str) -> bool:

0 commit comments

Comments
 (0)