mirror of https://github.com/k3s-io/k3s
Merge pull request #53731 from smarterclayton/dbus_races
Automatic merge from submit-queue (batch tested with PRs 49865, 53731, 54013, 54513, 51502). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. The DBusFakeConnection should have locks to prevent racespull/6/head
commit
04c5f800a5
|
@ -18,6 +18,7 @@ package dbus
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"sync"
|
||||||
|
|
||||||
godbus "github.com/godbus/dbus"
|
godbus "github.com/godbus/dbus"
|
||||||
)
|
)
|
||||||
|
@ -30,6 +31,7 @@ type DBusFake struct {
|
||||||
|
|
||||||
// DBusFakeConnection represents a fake D-Bus connection
|
// DBusFakeConnection represents a fake D-Bus connection
|
||||||
type DBusFakeConnection struct {
|
type DBusFakeConnection struct {
|
||||||
|
lock sync.Mutex
|
||||||
busObject *fakeObject
|
busObject *fakeObject
|
||||||
objects map[string]*fakeObject
|
objects map[string]*fakeObject
|
||||||
signalHandlers []chan<- *godbus.Signal
|
signalHandlers []chan<- *godbus.Signal
|
||||||
|
@ -88,6 +90,8 @@ func (conn *DBusFakeConnection) Object(name, path string) Object {
|
||||||
|
|
||||||
// Signal is part of the Connection interface
|
// Signal is part of the Connection interface
|
||||||
func (conn *DBusFakeConnection) Signal(ch chan<- *godbus.Signal) {
|
func (conn *DBusFakeConnection) Signal(ch chan<- *godbus.Signal) {
|
||||||
|
conn.lock.Lock()
|
||||||
|
defer conn.lock.Unlock()
|
||||||
for i := range conn.signalHandlers {
|
for i := range conn.signalHandlers {
|
||||||
if conn.signalHandlers[i] == ch {
|
if conn.signalHandlers[i] == ch {
|
||||||
conn.signalHandlers = append(conn.signalHandlers[:i], conn.signalHandlers[i+1:]...)
|
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
|
// EmitSignal emits a signal on conn
|
||||||
func (conn *DBusFakeConnection) EmitSignal(name, path, iface, signal string, args ...interface{}) {
|
func (conn *DBusFakeConnection) EmitSignal(name, path, iface, signal string, args ...interface{}) {
|
||||||
|
conn.lock.Lock()
|
||||||
|
defer conn.lock.Unlock()
|
||||||
sig := &godbus.Signal{
|
sig := &godbus.Signal{
|
||||||
Sender: name,
|
Sender: name,
|
||||||
Path: godbus.ObjectPath(path),
|
Path: godbus.ObjectPath(path),
|
||||||
|
|
Loading…
Reference in New Issue