| commit | 36bde9cd3407402ef6e0b4d10b038a4020bdf295 | [log] [tgz] |
|---|---|---|
| author | Jan Schär <jan@jschaer.ch> | Tue Mar 19 15:05:33 2024 +0100 |
| committer | Jan Schär <jan@jschaer.ch> | Tue Mar 19 15:25:01 2024 +0000 |
| tree | df868c44f56171a2dfef74f844848a218820846d | |
| parent | 87bbf7e4b41500316e93f98bee0564eb2cfb0366 [diff] |
m/pkg/event/memory: simplify and fix implementation The old implementation is very complicated and has multiple concurrency bugs. One of these bugs is already described in a block comment. Another bug is that if a watcher is closed while being updated, `update` will try to send on the closed channel `deadletterSubmitC`, which panics. This changes it to a much simpler implementation. It could be further simplified it by dropping the Sync flag entirely, which is currently unused. Or we could use the buffered channel also for Sync values, and just skip dropping previous values. This still ensures that all values are delivered, but changes the semantics slightly: Set would no longer block until Get is called, if there is space in the channel buffer. Additionally, there is no longer a memory leak when a watcher is repeatedly closed and readded, but Set never called. I added a test for this. Fixes #127 Change-Id: I2775a36cf2d097c5961a09a387428774a068e1f5 Reviewed-on: https://review.monogon.dev/c/monogon/+/2875 Reviewed-by: Serge Bazanski <serge@monogon.tech> Vouch-Run-CI: Serge Bazanski <serge@monogon.tech> Tested-by: Jenkins CI
This is the main repository containing the source code for the Monogon Platform.
This is pre-release software - take a look, and check back later!
Our build environment is self-contained and requires only minimal host dependencies:
/dev/kvm (if you want to run tests).Our docs assume that Bazelisk is available as bazel on your PATH.
Refer to SETUP.md for detailed instructions.
The source code lives in //metropolis (Metropolis is the codename of Monogon OS).
See the //metropolis/README.md for a developer quick start guide, or see the Monogon OS Handbook for user documentation.