Skip to content

Commit 3da0a43

Browse files
author
Mad Sheogorath
committed
Bugfix: concurrent modifications during iteration occurred in some cases while processing events.
1 parent 7b9e880 commit 3da0a43

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## v1.1.3
2+
* Bugfix: concurrent modifications during iteration occurred in some cases while processing events.
3+
14
## v1.1.2
25
* Bugfix: expireAfterSeconds option for IndexDescriptor of CollectionDescriptor was ignored.
36

lib/core/events.dart

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,18 +60,23 @@ class Events {
6060
_eventHandlers[T]?.remove(handler);
6161
}
6262

63+
Future<void> _tryExecute(Function handler, Event event) async {
64+
try {
65+
await handler(event);
66+
}
67+
catch (err, stack) {
68+
_server._logger.error('Event handler execution error: $err', stack);
69+
}
70+
}
71+
6372
Future<void> dispatch(Event event) async {
64-
if (event is! Event) throw Exception('$event is not an Event class instance');
73+
final List<Future<void>> futures = <Future<void>>[];
6574
if (_eventHandlers[event.runtimeType] != null) {
6675
for (final Function handler in _eventHandlers[event.runtimeType]!) {
67-
try {
68-
await handler(event);
69-
}
70-
catch (err, stack) {
71-
_server._logger.error('Event handler execution error: $err', stack);
72-
}
76+
futures.add(_tryExecute(handler, event));
7377
}
7478
}
79+
await Future.wait(futures);
7580
}
7681

7782
void dispose() {

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: serveme
22
description: Backend server framework designed for a quick development of modular WebSocket based server applications with MongoDB integration.
3-
version: 1.1.2
3+
version: 1.1.3
44
homepage: https://github.com/sourcecaster/serveme
55
repository: https://github.com/sourcecaster/serveme
66
issue_tracker: https://github.com/sourcecaster/serveme/issues

0 commit comments

Comments
 (0)