aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--roomserver/internal/input/input.go10
1 files changed, 5 insertions, 5 deletions
diff --git a/roomserver/internal/input/input.go b/roomserver/internal/input/input.go
index 2bed0c7f..6b833072 100644
--- a/roomserver/internal/input/input.go
+++ b/roomserver/internal/input/input.go
@@ -54,10 +54,8 @@ type inputWorker struct {
input chan *inputTask
}
+// Guarded by a CAS on w.running
func (w *inputWorker) start() {
- if !w.running.CAS(false, true) {
- return
- }
defer w.running.Store(false)
for {
select {
@@ -142,7 +140,7 @@ func (r *Inputer) InputRoomEvents(
// room - the channel will be quite small as it's just pointer types.
w, _ := r.workers.LoadOrStore(roomID, &inputWorker{
r: r,
- input: make(chan *inputTask, 10),
+ input: make(chan *inputTask, 32),
})
worker := w.(*inputWorker)
@@ -156,7 +154,9 @@ func (r *Inputer) InputRoomEvents(
}
// Send the task to the worker.
- go worker.start()
+ if worker.running.CAS(false, true) {
+ go worker.start()
+ }
worker.input <- tasks[i]
}