package syncutil

import "google.golang.org/grpc/xds/internal/clients/internal/syncutil"

Package syncutil implements additional synchronization primitives built upon the sync package.

Index

Types

type CallbackSerializer

type CallbackSerializer struct {
	// contains filtered or unexported fields
}

CallbackSerializer provides a mechanism to schedule callbacks in a synchronized manner. It provides a FIFO guarantee on the order of execution of scheduled callbacks. New callbacks can be scheduled by invoking the Schedule() method.

This type is safe for concurrent access.

func NewCallbackSerializer

func NewCallbackSerializer(ctx context.Context) *CallbackSerializer

NewCallbackSerializer returns a new CallbackSerializer instance. The provided context will be passed to the scheduled callbacks. Users should cancel the provided context to shutdown the CallbackSerializer. It is guaranteed that no callbacks will be added once this context is canceled, and any pending un-run callbacks will be executed before the serializer is shut down.

func (*CallbackSerializer) Done

func (cs *CallbackSerializer) Done() <-chan struct{}

Done returns a channel that is closed after the context passed to NewCallbackSerializer is canceled and all callbacks have been executed.

func (*CallbackSerializer) ScheduleOr

func (cs *CallbackSerializer) ScheduleOr(f func(ctx context.Context), onFailure func())

ScheduleOr schedules the provided callback function f to be executed in the order it was added. If the context passed to NewCallbackSerializer has been canceled before this method is called, the onFailure callback will be executed inline instead.

Callbacks are expected to honor the context when performing any blocking operations, and should return early when the context is canceled.

func (*CallbackSerializer) TrySchedule

func (cs *CallbackSerializer) TrySchedule(f func(ctx context.Context))

TrySchedule tries to schedule the provided callback function f to be executed in the order it was added. This is a best-effort operation. If the context passed to NewCallbackSerializer was canceled before this method is called, the callback will not be scheduled.

Callbacks are expected to honor the context when performing any blocking operations, and should return early when the context is canceled.

type Event

type Event struct {
	// contains filtered or unexported fields
}

Event represents a one-time event that may occur in the future.

func NewEvent

func NewEvent() *Event

NewEvent returns a new, ready-to-use Event.

func (*Event) Done

func (e *Event) Done() <-chan struct{}

Done returns a channel that will be closed when Fire is called.

func (*Event) Fire

func (e *Event) Fire() bool

Fire causes e to complete. It is safe to call multiple times, and concurrently. It returns true iff this call to Fire caused the signaling channel returned by Done to close.

func (*Event) HasFired

func (e *Event) HasFired() bool

HasFired returns true if Fire has been called.

Source Files

callback_serializer.go event.go

Version
v1.73.0-dev
Published
Apr 3, 2025
Platform
linux/amd64
Imports
4 packages
Last checked
34 minutes ago

Tools for package owners.