chore: upgrade dependencies
This commit is contained in:
		
							
								
								
									
										3
									
								
								vendor/golang.org/x/sync/AUTHORS
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sync/AUTHORS
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
# This source code refers to The Go Authors for copyright purposes.
 | 
			
		||||
# The master list of authors is in the main Go distribution,
 | 
			
		||||
# visible at http://tip.golang.org/AUTHORS.
 | 
			
		||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sync/CONTRIBUTORS
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sync/CONTRIBUTORS
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
# This source code was written by the Go contributors.
 | 
			
		||||
# The master list of contributors is in the main Go distribution,
 | 
			
		||||
# visible at http://tip.golang.org/CONTRIBUTORS.
 | 
			
		||||
							
								
								
									
										27
									
								
								vendor/golang.org/x/sync/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								vendor/golang.org/x/sync/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
Copyright (c) 2009 The Go Authors. All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use in source and binary forms, with or without
 | 
			
		||||
modification, are permitted provided that the following conditions are
 | 
			
		||||
met:
 | 
			
		||||
 | 
			
		||||
   * Redistributions of source code must retain the above copyright
 | 
			
		||||
notice, this list of conditions and the following disclaimer.
 | 
			
		||||
   * Redistributions in binary form must reproduce the above
 | 
			
		||||
copyright notice, this list of conditions and the following disclaimer
 | 
			
		||||
in the documentation and/or other materials provided with the
 | 
			
		||||
distribution.
 | 
			
		||||
   * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
contributors may be used to endorse or promote products derived from
 | 
			
		||||
this software without specific prior written permission.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
							
								
								
									
										22
									
								
								vendor/golang.org/x/sync/PATENTS
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vendor/golang.org/x/sync/PATENTS
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
Additional IP Rights Grant (Patents)
 | 
			
		||||
 | 
			
		||||
"This implementation" means the copyrightable works distributed by
 | 
			
		||||
Google as part of the Go project.
 | 
			
		||||
 | 
			
		||||
Google hereby grants to You a perpetual, worldwide, non-exclusive,
 | 
			
		||||
no-charge, royalty-free, irrevocable (except as stated in this section)
 | 
			
		||||
patent license to make, have made, use, offer to sell, sell, import,
 | 
			
		||||
transfer and otherwise run, modify and propagate the contents of this
 | 
			
		||||
implementation of Go, where such license applies only to those patent
 | 
			
		||||
claims, both currently owned or controlled by Google and acquired in
 | 
			
		||||
the future, licensable by Google that are necessarily infringed by this
 | 
			
		||||
implementation of Go.  This grant does not include claims that would be
 | 
			
		||||
infringed only as a consequence of further modification of this
 | 
			
		||||
implementation.  If you or your agent or exclusive licensee institute or
 | 
			
		||||
order or agree to the institution of patent litigation against any
 | 
			
		||||
entity (including a cross-claim or counterclaim in a lawsuit) alleging
 | 
			
		||||
that this implementation of Go or any code incorporated within this
 | 
			
		||||
implementation of Go constitutes direct or contributory patent
 | 
			
		||||
infringement, or inducement of patent infringement, then any patent
 | 
			
		||||
rights granted to you under this License for this implementation of Go
 | 
			
		||||
shall terminate as of the date such litigation is filed.
 | 
			
		||||
							
								
								
									
										136
									
								
								vendor/golang.org/x/sync/semaphore/semaphore.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								vendor/golang.org/x/sync/semaphore/semaphore.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,136 @@
 | 
			
		||||
// Copyright 2017 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
// Package semaphore provides a weighted semaphore implementation.
 | 
			
		||||
package semaphore // import "golang.org/x/sync/semaphore"
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"container/list"
 | 
			
		||||
	"context"
 | 
			
		||||
	"sync"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type waiter struct {
 | 
			
		||||
	n     int64
 | 
			
		||||
	ready chan<- struct{} // Closed when semaphore acquired.
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewWeighted creates a new weighted semaphore with the given
 | 
			
		||||
// maximum combined weight for concurrent access.
 | 
			
		||||
func NewWeighted(n int64) *Weighted {
 | 
			
		||||
	w := &Weighted{size: n}
 | 
			
		||||
	return w
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Weighted provides a way to bound concurrent access to a resource.
 | 
			
		||||
// The callers can request access with a given weight.
 | 
			
		||||
type Weighted struct {
 | 
			
		||||
	size    int64
 | 
			
		||||
	cur     int64
 | 
			
		||||
	mu      sync.Mutex
 | 
			
		||||
	waiters list.List
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Acquire acquires the semaphore with a weight of n, 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 (s *Weighted) Acquire(ctx context.Context, n int64) error {
 | 
			
		||||
	s.mu.Lock()
 | 
			
		||||
	if s.size-s.cur >= n && s.waiters.Len() == 0 {
 | 
			
		||||
		s.cur += n
 | 
			
		||||
		s.mu.Unlock()
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if n > s.size {
 | 
			
		||||
		// Don't make other Acquire calls block on one that's doomed to fail.
 | 
			
		||||
		s.mu.Unlock()
 | 
			
		||||
		<-ctx.Done()
 | 
			
		||||
		return ctx.Err()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ready := make(chan struct{})
 | 
			
		||||
	w := waiter{n: n, ready: ready}
 | 
			
		||||
	elem := s.waiters.PushBack(w)
 | 
			
		||||
	s.mu.Unlock()
 | 
			
		||||
 | 
			
		||||
	select {
 | 
			
		||||
	case <-ctx.Done():
 | 
			
		||||
		err := ctx.Err()
 | 
			
		||||
		s.mu.Lock()
 | 
			
		||||
		select {
 | 
			
		||||
		case <-ready:
 | 
			
		||||
			// Acquired the semaphore after we were canceled.  Rather than trying to
 | 
			
		||||
			// fix up the queue, just pretend we didn't notice the cancelation.
 | 
			
		||||
			err = nil
 | 
			
		||||
		default:
 | 
			
		||||
			isFront := s.waiters.Front() == elem
 | 
			
		||||
			s.waiters.Remove(elem)
 | 
			
		||||
			// If we're at the front and there're extra tokens left, notify other waiters.
 | 
			
		||||
			if isFront && s.size > s.cur {
 | 
			
		||||
				s.notifyWaiters()
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		s.mu.Unlock()
 | 
			
		||||
		return err
 | 
			
		||||
 | 
			
		||||
	case <-ready:
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TryAcquire acquires the semaphore with a weight of n without blocking.
 | 
			
		||||
// On success, returns true. On failure, returns false and leaves the semaphore unchanged.
 | 
			
		||||
func (s *Weighted) TryAcquire(n int64) bool {
 | 
			
		||||
	s.mu.Lock()
 | 
			
		||||
	success := s.size-s.cur >= n && s.waiters.Len() == 0
 | 
			
		||||
	if success {
 | 
			
		||||
		s.cur += n
 | 
			
		||||
	}
 | 
			
		||||
	s.mu.Unlock()
 | 
			
		||||
	return success
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Release releases the semaphore with a weight of n.
 | 
			
		||||
func (s *Weighted) Release(n int64) {
 | 
			
		||||
	s.mu.Lock()
 | 
			
		||||
	s.cur -= n
 | 
			
		||||
	if s.cur < 0 {
 | 
			
		||||
		s.mu.Unlock()
 | 
			
		||||
		panic("semaphore: released more than held")
 | 
			
		||||
	}
 | 
			
		||||
	s.notifyWaiters()
 | 
			
		||||
	s.mu.Unlock()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *Weighted) notifyWaiters() {
 | 
			
		||||
	for {
 | 
			
		||||
		next := s.waiters.Front()
 | 
			
		||||
		if next == nil {
 | 
			
		||||
			break // No more waiters blocked.
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		w := next.Value.(waiter)
 | 
			
		||||
		if s.size-s.cur < w.n {
 | 
			
		||||
			// Not enough tokens for the next waiter.  We could keep going (to try to
 | 
			
		||||
			// find a waiter with a smaller request), but under load that could cause
 | 
			
		||||
			// starvation for large requests; instead, we leave all remaining waiters
 | 
			
		||||
			// blocked.
 | 
			
		||||
			//
 | 
			
		||||
			// Consider a semaphore used as a read-write lock, with N tokens, N
 | 
			
		||||
			// readers, and one writer.  Each reader can Acquire(1) to obtain a read
 | 
			
		||||
			// lock.  The writer can Acquire(N) to obtain a write lock, excluding all
 | 
			
		||||
			// of the readers.  If we allow the readers to jump ahead in the queue,
 | 
			
		||||
			// the writer will starve — there is always one token available for every
 | 
			
		||||
			// reader.
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		s.cur += w.n
 | 
			
		||||
		s.waiters.Remove(next)
 | 
			
		||||
		close(w.ready)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user