Data races
goautolock(1)
relies on pointers to check whether a signal has been caught. This leads to data races. Some have been observed on second lock (after having unlocked for first time and waiting for the second one).
Log:
Display: :0
Locker program: i3lock
LockerArgs: [-d -n -c 222222]
LockInterval: 10
NotificationInterval: 8
Caffeine: 10
Kill Disallowed: no
Ready to lock screen!
==================
WARNING: DATA RACE
Write at 0x00c00007c4e0 by main goroutine:
gitlab.com/mrvik/goautolock/watcher.waitForLock()
watcher/watcher.go:44 +0xc1
gitlab.com/mrvik/goautolock/watcher.TimeIdleWatcher()
watcher/watcher.go:71 +0x19d
main.main()
main.go:32 +0x116
Previous write at 0x00c00007c4e0 by goroutine 8:
gitlab.com/mrvik/goautolock/watcher.(*idleTimeStruct).checkTime()
watcher/watcher.go:33 +0x15e
gitlab.com/mrvik/goautolock/watcher.TimeIdleWatcher.func1()
watcher/watcher.go:65 +0xf1
Goroutine 8 (running) created at:
gitlab.com/mrvik/goautolock/watcher.TimeIdleWatcher()
watcher/watcher.go:58 +0x178
main.main()
main.go:32 +0x116
==================
==================
WARNING: DATA RACE
Write at 0x00c0000840c8 by main goroutine:
gitlab.com/mrvik/goautolock/watcher.waitForLock()
watcher/watcher.go:46 +0x134
gitlab.com/mrvik/goautolock/watcher.TimeIdleWatcher()
watcher/watcher.go:71 +0x19d
main.main()
main.go:32 +0x116
Previous read at 0x00c0000840c8 by goroutine 8:
gitlab.com/mrvik/goautolock/watcher.TimeIdleWatcher.func1()
watcher/watcher.go:60 +0x72
Goroutine 8 (running) created at:
gitlab.com/mrvik/goautolock/watcher.TimeIdleWatcher()
watcher/watcher.go:58 +0x178
main.main()
main.go:32 +0x116
==================
==================
WARNING: DATA RACE
Read at 0x00c0000840c0 by goroutine 8:
gitlab.com/mrvik/goautolock/watcher.(*idleTimeStruct).checkTime()
watcher/watcher.go:31 +0xfc
gitlab.com/mrvik/goautolock/watcher.TimeIdleWatcher.func1()
watcher/watcher.go:65 +0xf1
Previous write at 0x00c0000840c0 by main goroutine:
gitlab.com/mrvik/goautolock/watcher.waitForLock()
watcher/watcher.go:45 +0xfa
gitlab.com/mrvik/goautolock/watcher.TimeIdleWatcher()
watcher/watcher.go:71 +0x19d
main.main()
main.go:32 +0x116
Goroutine 8 (running) created at:
gitlab.com/mrvik/goautolock/watcher.TimeIdleWatcher()
watcher/watcher.go:58 +0x178
main.main()
main.go:32 +0x116
==================
^CExiting due to "interrupt" signal
==================
WARNING: DATA RACE
Write at 0x00c0000840c9 by goroutine 7:
gitlab.com/mrvik/goautolock/signals.signalLoop()
signals/signals.go:26 +0x273
gitlab.com/mrvik/goautolock/signals.CatchSignals()
signals/signals.go:36 +0x42
Previous read at 0x00c0000840c9 by goroutine 8:
gitlab.com/mrvik/goautolock/watcher.TimeIdleWatcher.func1()
watcher/watcher.go:59 +0x51
Goroutine 7 (running) created at:
main.main()
main.go:29 +0x152
Goroutine 8 (running) created at:
gitlab.com/mrvik/goautolock/watcher.TimeIdleWatcher()
watcher/watcher.go:58 +0x178
main.main()
main.go:32 +0x116
==================
Found 4 data race(s)
This behavior should be changed (although this don't cause a unwanted behaviour, it could). Channels should be used (maybe with a ticker?)
Edited by Víctor González