mirror of
https://github.com/status-im/consul.git
synced 2025-01-09 13:26:07 +00:00
5fb9df1640
* Adding explicit MPL license for sub-package This directory and its subdirectories (packages) contain files licensed with the MPLv2 `LICENSE` file in this directory and are intentionally licensed separately from the BSL `LICENSE` file at the root of this repository. * Adding explicit MPL license for sub-package This directory and its subdirectories (packages) contain files licensed with the MPLv2 `LICENSE` file in this directory and are intentionally licensed separately from the BSL `LICENSE` file at the root of this repository. * Updating the license from MPL to Business Source License Going forward, this project will be licensed under the Business Source License v1.1. Please see our blog post for more details at <Blog URL>, FAQ at www.hashicorp.com/licensing-faq, and details of the license at www.hashicorp.com/bsl. * add missing license headers * Update copyright file headers to BUSL-1.1 * Update copyright file headers to BUSL-1.1 * Update copyright file headers to BUSL-1.1 * Update copyright file headers to BUSL-1.1 * Update copyright file headers to BUSL-1.1 * Update copyright file headers to BUSL-1.1 * Update copyright file headers to BUSL-1.1 * Update copyright file headers to BUSL-1.1 * Update copyright file headers to BUSL-1.1 * Update copyright file headers to BUSL-1.1 * Update copyright file headers to BUSL-1.1 * Update copyright file headers to BUSL-1.1 * Update copyright file headers to BUSL-1.1 * Update copyright file headers to BUSL-1.1 * Update copyright file headers to BUSL-1.1 --------- Co-authored-by: hashicorp-copywrite[bot] <110428419+hashicorp-copywrite[bot]@users.noreply.github.com>
40 lines
1.0 KiB
Go
40 lines
1.0 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
/*
|
|
Package mutex implements the sync.Locker interface using x/sync/semaphore. It
|
|
may be used as a replacement for sync.Mutex when one or more goroutines need to
|
|
allow their calls to Lock to be cancelled by context cancellation.
|
|
*/
|
|
package mutex
|
|
|
|
import (
|
|
"context"
|
|
|
|
"golang.org/x/sync/semaphore"
|
|
)
|
|
|
|
type Mutex semaphore.Weighted
|
|
|
|
// New returns a Mutex that is ready for use.
|
|
func New() *Mutex {
|
|
return (*Mutex)(semaphore.NewWeighted(1))
|
|
}
|
|
|
|
func (m *Mutex) Lock() {
|
|
_ = (*semaphore.Weighted)(m).Acquire(context.Background(), 1)
|
|
}
|
|
|
|
func (m *Mutex) Unlock() {
|
|
(*semaphore.Weighted)(m).Release(1)
|
|
}
|
|
|
|
// TryLock acquires the mutex, blocking until resources are available or ctx is
|
|
// done. On success, returns nil. On failure, returns ctx.Err() and leaves the
|
|
// semaphore unchanged.
|
|
//
|
|
// If ctx is already done, Acquire may still succeed without blocking.
|
|
func (m *Mutex) TryLock(ctx context.Context) error {
|
|
return (*semaphore.Weighted)(m).Acquire(ctx, 1)
|
|
}
|