Skip to content

Commit 6db8734

Browse files
committed
fix issue #112: add new functions IsEmpty and IsTimeout
1 parent 49ec74b commit 6db8734

File tree

2 files changed

+14
-9
lines changed

2 files changed

+14
-9
lines changed

semaphore.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,16 @@ func New(capacity int) Semaphore {
5656
return make(semaphore, capacity)
5757
}
5858

59+
// IsEmpty checks if passed error is related to call Release on empty semaphore.
60+
func IsEmpty(err error) bool {
61+
return err == errEmpty
62+
}
63+
64+
// IsTimeout checks if passed error is related to call Acquire on full semaphore.
65+
func IsTimeout(err error) bool {
66+
return err == errTimeout
67+
}
68+
5969
var (
6070
nothing ReleaseFunc = func() {}
6171

@@ -68,7 +78,8 @@ type semaphore chan struct{}
6878
func (sem semaphore) Acquire(deadline <-chan struct{}) (ReleaseFunc, error) {
6979
select {
7080
case sem <- struct{}{}:
71-
return releaser(sem), nil
81+
//nolint: gas
82+
return func() { _ = sem.Release() }, nil
7283
case <-deadline:
7384
return nothing, errTimeout
7485
}
@@ -101,9 +112,3 @@ func (sem semaphore) Signal(deadline <-chan struct{}) <-chan ReleaseFunc {
101112
}()
102113
return ch
103114
}
104-
105-
func releaser(releaser Releaser) ReleaseFunc {
106-
return func() {
107-
_ = releaser.Release() //nolint: gas
108-
}
109-
}

semaphore_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func TestSemaphore_Acquire_Timeout(t *testing.T) {
2323
} {
2424
sem := semaphore.New(0)
2525
release, err := sem.Acquire(semaphore.WithTimeout(tc.timeout))
26-
if err.Error() != expected {
26+
if !semaphore.IsTimeout(err) {
2727
t.Errorf("an unexpected error in test case %q. expected: %s; obtained: %v", tc.name, expected, err)
2828
}
2929
_ = release.Release()
@@ -66,7 +66,7 @@ func TestSemaphore_Occupied_Linearity(t *testing.T) {
6666
func TestSemaphore_Release_TryToGetDeadLock(t *testing.T) {
6767
sem := semaphore.New(0)
6868

69-
if err, expected := sem.Release(), "semaphore is empty"; err.Error() != expected {
69+
if err, expected := sem.Release(), "semaphore is empty"; !semaphore.IsEmpty(err) {
7070
t.Errorf("an unexpected error. expected: %s; obtained: %v", expected, err)
7171
}
7272
}

0 commit comments

Comments
 (0)