Merge pull request #42543 from rainrambler/patch-1

use defer to unlock mutex
This commit is contained in:
Sebastiaan van Stijn 2021-09-01 13:26:30 +02:00 committed by GitHub
commit 8fa6126f75
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 4 additions and 10 deletions

View File

@ -50,12 +50,12 @@ func NewBytesPipe() *BytesPipe {
// It can allocate new []byte slices in a process of writing. // It can allocate new []byte slices in a process of writing.
func (bp *BytesPipe) Write(p []byte) (int, error) { func (bp *BytesPipe) Write(p []byte) (int, error) {
bp.mu.Lock() bp.mu.Lock()
defer bp.mu.Unlock()
written := 0 written := 0
loop0: loop0:
for { for {
if bp.closeErr != nil { if bp.closeErr != nil {
bp.mu.Unlock()
return written, ErrClosed return written, ErrClosed
} }
@ -72,7 +72,6 @@ loop0:
// errBufferFull is an error we expect to get if the buffer is full // errBufferFull is an error we expect to get if the buffer is full
if err != nil && err != errBufferFull { if err != nil && err != errBufferFull {
bp.wait.Broadcast() bp.wait.Broadcast()
bp.mu.Unlock()
return written, err return written, err
} }
@ -100,7 +99,6 @@ loop0:
bp.buf = append(bp.buf, getBuffer(nextCap)) bp.buf = append(bp.buf, getBuffer(nextCap))
} }
bp.wait.Broadcast() bp.wait.Broadcast()
bp.mu.Unlock()
return written, nil return written, nil
} }
@ -126,17 +124,14 @@ func (bp *BytesPipe) Close() error {
// Data could be read only once. // Data could be read only once.
func (bp *BytesPipe) Read(p []byte) (n int, err error) { func (bp *BytesPipe) Read(p []byte) (n int, err error) {
bp.mu.Lock() bp.mu.Lock()
defer bp.mu.Unlock()
if bp.bufLen == 0 { if bp.bufLen == 0 {
if bp.closeErr != nil { if bp.closeErr != nil {
err := bp.closeErr return 0, bp.closeErr
bp.mu.Unlock()
return 0, err
} }
bp.wait.Wait() bp.wait.Wait()
if bp.bufLen == 0 && bp.closeErr != nil { if bp.bufLen == 0 && bp.closeErr != nil {
err := bp.closeErr return 0, bp.closeErr
bp.mu.Unlock()
return 0, err
} }
} }
@ -161,7 +156,6 @@ func (bp *BytesPipe) Read(p []byte) (n int, err error) {
} }
bp.wait.Broadcast() bp.wait.Broadcast()
bp.mu.Unlock()
return return
} }