From 3707b10b9f7b9555a1542d1d07b2ec4086d1de10 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Wed, 11 Oct 2017 11:41:30 -0400 Subject: [PATCH] The DBusFakeConnection should have locks to prevent races Otherwise tests that use dbus signals fail race detection. --- pkg/util/dbus/fake_dbus.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/util/dbus/fake_dbus.go b/pkg/util/dbus/fake_dbus.go index 44131272e7..28cde82fb2 100644 --- a/pkg/util/dbus/fake_dbus.go +++ b/pkg/util/dbus/fake_dbus.go @@ -18,6 +18,7 @@ package dbus import ( "fmt" + "sync" godbus "github.com/godbus/dbus" ) @@ -30,6 +31,7 @@ type DBusFake struct { // DBusFakeConnection represents a fake D-Bus connection type DBusFakeConnection struct { + lock sync.Mutex busObject *fakeObject objects map[string]*fakeObject signalHandlers []chan<- *godbus.Signal @@ -88,6 +90,8 @@ func (conn *DBusFakeConnection) Object(name, path string) Object { // Signal is part of the Connection interface func (conn *DBusFakeConnection) Signal(ch chan<- *godbus.Signal) { + conn.lock.Lock() + defer conn.lock.Unlock() for i := range conn.signalHandlers { if conn.signalHandlers[i] == ch { conn.signalHandlers = append(conn.signalHandlers[:i], conn.signalHandlers[i+1:]...) @@ -109,6 +113,8 @@ func (conn *DBusFakeConnection) AddObject(name, path string, handler DBusFakeHan // EmitSignal emits a signal on conn func (conn *DBusFakeConnection) EmitSignal(name, path, iface, signal string, args ...interface{}) { + conn.lock.Lock() + defer conn.lock.Unlock() sig := &godbus.Signal{ Sender: name, Path: godbus.ObjectPath(path),