go-perun icon indicating copy to clipboard operation
go-perun copied to clipboard

Deadlock when accessing channel state

Open matthiasgeihs opened this issue 2 years ago • 0 comments

Location

package channel

Problem

When accessing the state of a channel, one must be careful not to do this while another channel operation (e.g., an update) is happening concurrently, as the result will be a deadlock. (For example, when using the OnUpdate handler, one must not access the channel state from within the handler as the channel mutex is still locked.) Such deadlock instances are easy to run into and can be very hard to debug.

Proposal

It would be nice if we can access the channel state at any time, except when the internals actually are about to modify the state. At the moment the mutex is held throughout the whole update operation, for example. Also we should consider to return a copy of the state, and not a pointer, to ensure that we cannot alter the internal state from an external location.

matthiasgeihs avatar Jul 02 '22 09:07 matthiasgeihs