shiny/driver/internal/event: factor out initalization boilerplate into a method
Change-Id: Ia89c7d9cb122dd33d29d6b443d16b895f021032f
Reviewed-on: https://go-review.googlesource.com/94136
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/shiny/driver/internal/event/event.go b/shiny/driver/internal/event/event.go
index 3a2b553..686a123 100644
--- a/shiny/driver/internal/event/event.go
+++ b/shiny/driver/internal/event/event.go
@@ -18,13 +18,17 @@
front []interface{} // LIFO.
}
-// NextEvent implements the screen.EventDeque interface.
-func (q *Deque) NextEvent() interface{} {
+func (q *Deque) lockAndInit() {
q.mu.Lock()
- defer q.mu.Unlock()
if q.cond.L == nil {
q.cond.L = &q.mu
}
+}
+
+// NextEvent implements the screen.EventDeque interface.
+func (q *Deque) NextEvent() interface{} {
+ q.lockAndInit()
+ defer q.mu.Unlock()
for {
if n := len(q.front); n > 0 {
@@ -47,11 +51,8 @@
// Send implements the screen.EventDeque interface.
func (q *Deque) Send(event interface{}) {
- q.mu.Lock()
+ q.lockAndInit()
defer q.mu.Unlock()
- if q.cond.L == nil {
- q.cond.L = &q.mu
- }
q.back = append(q.back, event)
q.cond.Signal()
@@ -59,11 +60,8 @@
// SendFirst implements the screen.EventDeque interface.
func (q *Deque) SendFirst(event interface{}) {
- q.mu.Lock()
+ q.lockAndInit()
defer q.mu.Unlock()
- if q.cond.L == nil {
- q.cond.L = &q.mu
- }
q.front = append(q.front, event)
q.cond.Signal()