util/eventbus: flesh out docs a bit

Updates #cleanup

Change-Id: Ia6b0e4b0426be1dd10a777aff0a81d4dd6b69b01
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
pull/17272/head
Brad Fitzpatrick 2 months ago committed by Brad Fitzpatrick
parent 0b27871860
commit a40f23ad4a

@ -77,7 +77,7 @@ func (b *Bus) Debugger() *Debugger {
return &Debugger{b} return &Debugger{b}
} }
// Close closes the bus. Implicitly closes all clients, publishers and // Close closes the bus. It implicitly closes all clients, publishers and
// subscribers attached to the bus. // subscribers attached to the bus.
// //
// Close blocks until the bus is fully shut down. The bus is // Close blocks until the bus is fully shut down. The bus is

@ -29,7 +29,7 @@ type Client struct {
func (c *Client) Name() string { return c.name } func (c *Client) Name() string { return c.name }
// Close closes the client. Implicitly closes all publishers and // Close closes the client. It implicitly closes all publishers and
// subscribers obtained from this client. // subscribers obtained from this client.
func (c *Client) Close() { func (c *Client) Close() {
var ( var (

@ -27,6 +27,10 @@ func newPublisher[T any](c *Client) *Publisher[T] {
// Close closes the publisher. // Close closes the publisher.
// //
// Calls to Publish after Close silently do nothing. // Calls to Publish after Close silently do nothing.
//
// If the Bus or Client from which the Publisher was created is closed,
// the Publisher is implicitly closed and does not need to be closed
// separately.
func (p *Publisher[T]) Close() { func (p *Publisher[T]) Close() {
// Just unblocks any active calls to Publish, no other // Just unblocks any active calls to Publish, no other
// synchronization needed. // synchronization needed.

@ -158,7 +158,7 @@ func (q *subscribeState) subscriberFor(val any) subscriber {
return q.outputs[reflect.TypeOf(val)] return q.outputs[reflect.TypeOf(val)]
} }
// Close closes the subscribeState. Implicitly closes all Subscribers // Close closes the subscribeState. It implicitly closes all Subscribers
// linked to this state, and any pending events are discarded. // linked to this state, and any pending events are discarded.
func (s *subscribeState) close() { func (s *subscribeState) close() {
s.dispatcher.StopAndWait() s.dispatcher.StopAndWait()
@ -244,6 +244,10 @@ func (s *Subscriber[T]) Done() <-chan struct{} {
// Close closes the Subscriber, indicating the caller no longer wishes // Close closes the Subscriber, indicating the caller no longer wishes
// to receive this event type. After Close, receives on // to receive this event type. After Close, receives on
// [Subscriber.Events] block for ever. // [Subscriber.Events] block for ever.
//
// If the Bus from which the Subscriber was created is closed,
// the Subscriber is implicitly closed and does not need to be closed
// separately.
func (s *Subscriber[T]) Close() { func (s *Subscriber[T]) Close() {
s.stop.Stop() // unblock receivers s.stop.Stop() // unblock receivers
s.unregister() s.unregister()

Loading…
Cancel
Save