aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorTim Culverhouse <tim@timculverhouse.com>2022-10-17 15:16:10 -0500
committerRobin Jarry <robin@jarry.cc>2022-10-18 22:20:44 +0200
commit7016c6f86ae09b3e49eab665aa013628db4ee102 (patch)
tree3ffe1eebd8fea0e043ffcdbf3376a24aa51a2acc /lib
parent556f346f96946a54223798685c445ec413a4031e (diff)
downloadaerc-7016c6f86ae09b3e49eab665aa013628db4ee102.tar.gz
aercmsg: add AercFuncMsg and QueueFunc
Introduce AercFuncMsg and QueueFunc. These are used in combination to queue a function to be run in the main goroutine. This can be used to prevent data races in delayed function calls (ie from debounce functions). Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Acked-by: Robin Jarry <robin@jarry.cc>
Diffstat (limited to 'lib')
-rw-r--r--lib/ui/ui.go10
1 files changed, 10 insertions, 0 deletions
diff --git a/lib/ui/ui.go b/lib/ui/ui.go
index 313f90d8..ea181d33 100644
--- a/lib/ui/ui.go
+++ b/lib/ui/ui.go
@@ -13,12 +13,22 @@ const (
var MsgChannel = make(chan AercMsg, 50)
+type AercFuncMsg struct {
+ Func func()
+}
+
// QueueRedraw sends a nil message into the MsgChannel. Nothing will handle this
// message, but a redraw will occur if the UI is marked as invalid
func QueueRedraw() {
MsgChannel <- nil
}
+// QueueFunc queues a function to be called in the main goroutine. This can be
+// used to prevent race conditions from delayed functions
+func QueueFunc(fn func()) {
+ MsgChannel <- &AercFuncMsg{Func: fn}
+}
+
// dirty is the dirty state of the UI. Any value other than 0 means the UI is in
// a dirty state. Dirty should only be accessed via atomic operations to
// maintain thread safety