Skip to content

Commit

Permalink
netsync: Convert lifecycle to context.
Browse files Browse the repository at this point in the history
This modifies the lifecycle of the sync manager to use the expected
pattern for running subsystems based on contexts.

In particular, this replaces the Start and Stop methods with a single
method named Run and arranges for it to block until the provided context
is cancelled.  This is more flexible for the caller since it can easily
turn blocking code into async code while the reverse is not true.

The new Run method waits for all goroutines that it starts to shutdown
before returning to help ensure an orderly shutdown.

Since there are exported methods that send messages to the event handler
goroutine via a channel and that goroutine is stopped during the
shutdown process, all sends select across both the channel in question
as well as a quit channel which is closed when the context it cancelled.
This ensures callers can't end up blocking on send to a goroutine that
is no longer running without needing additional mutexes.

As part of the conversion, this modifies various functions that respond
to channels to select across the quit channel as well to support
cancellation.

Finally, the server is modified to take advantage of the new lifecycle
semantics by taking ownership of the sync manager directly in its Run
method versus the peer handler.
  • Loading branch information
davecgh committed Jan 11, 2021
1 parent 0e72a3e commit 9a86940
Show file tree
Hide file tree
Showing 2 changed files with 147 additions and 123 deletions.
Loading

0 comments on commit 9a86940

Please sign in to comment.