diff options
author | James Tucker <jftucker@gmail.com> | 2023-05-05 16:11:38 -0700 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2023-06-27 17:43:35 +0200 |
commit | b7cd547315bed421a648d0a0f1ee5a0fc1b1151e (patch) | |
tree | 1fb25dfb160f065b54a036de6e8e111271571992 /device | |
parent | 052af4a8072bbbd3bfe7edf46fe3c1b350f71f08 (diff) |
device: wait for and lock ipc operations during close
If an IPC operation is in flight while close starts, it is possible for
both processes to deadlock. Prevent this by taking the IPC lock at the
start of close and for the duration.
Signed-off-by: James Tucker <jftucker@gmail.com>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'device')
-rw-r--r-- | device/device.go | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/device/device.go b/device/device.go index 091c8d4..1af9fe0 100644 --- a/device/device.go +++ b/device/device.go @@ -368,6 +368,8 @@ func (device *Device) RemoveAllPeers() { } func (device *Device) Close() { + device.ipcMutex.Lock() + defer device.ipcMutex.Unlock() device.state.Lock() defer device.state.Unlock() if device.isClosed() { |