eliminate race condition with listen/watch

This commit is contained in:
Christien Rioux 2025-05-18 11:33:08 -04:00
parent 34f9bea6eb
commit 61855521dc
4 changed files with 14 additions and 13 deletions

View file

@ -608,14 +608,13 @@ class _DHTLogSpine {
Future<void> watch() async {
// This will update any existing watches if necessary
try {
await _spineRecord.watch(subkeys: [ValueSubkeyRange.single(0)]);
// Update changes to the head record
// xxx: check if this localChanges can be false...
// xxx: Don't watch for local changes because this class already handles
// xxx: notifying listeners and knows when it makes local changes
_subscription ??=
await _spineRecord.listen(localChanges: true, _onSpineChanged);
await _spineRecord.watch(subkeys: [ValueSubkeyRange.single(0)]);
} on Exception {
// If anything fails, try to cancel the watches
await cancelWatch();

View file

@ -482,13 +482,13 @@ class _DHTShortArrayHead {
Future<void> watch() async {
// This will update any existing watches if necessary
try {
await _headRecord.watch(subkeys: [ValueSubkeyRange.single(0)]);
// Update changes to the head record
// Don't watch for local changes because this class already handles
// notifying listeners and knows when it makes local changes
_subscription ??=
await _headRecord.listen(localChanges: false, _onHeadValueChanged);
await _headRecord.watch(subkeys: [ValueSubkeyRange.single(0)]);
} on Exception {
// If anything fails, try to cancel the watches
await cancelWatch();