mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Prevent stdout / stderr race condition in limitedBuffer.
Signed-off-by: Stephen Drake <stephen@xenolith.net>
This commit is contained in:
parent
b248de7e33
commit
c3319445aa
1 changed files with 8 additions and 0 deletions
|
@ -5,6 +5,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
|
@ -271,11 +272,15 @@ func (d *Daemon) stopHealthchecks(c *container.Container) {
|
||||||
// Buffer up to maxOutputLen bytes. Further data is discarded.
|
// Buffer up to maxOutputLen bytes. Further data is discarded.
|
||||||
type limitedBuffer struct {
|
type limitedBuffer struct {
|
||||||
buf bytes.Buffer
|
buf bytes.Buffer
|
||||||
|
mu sync.Mutex
|
||||||
truncated bool // indicates that data has been lost
|
truncated bool // indicates that data has been lost
|
||||||
}
|
}
|
||||||
|
|
||||||
// Append to limitedBuffer while there is room.
|
// Append to limitedBuffer while there is room.
|
||||||
func (b *limitedBuffer) Write(data []byte) (int, error) {
|
func (b *limitedBuffer) Write(data []byte) (int, error) {
|
||||||
|
b.mu.Lock()
|
||||||
|
defer b.mu.Unlock()
|
||||||
|
|
||||||
bufLen := b.buf.Len()
|
bufLen := b.buf.Len()
|
||||||
dataLen := len(data)
|
dataLen := len(data)
|
||||||
keep := min(maxOutputLen-bufLen, dataLen)
|
keep := min(maxOutputLen-bufLen, dataLen)
|
||||||
|
@ -290,6 +295,9 @@ func (b *limitedBuffer) Write(data []byte) (int, error) {
|
||||||
|
|
||||||
// The contents of the buffer, with "..." appended if it overflowed.
|
// The contents of the buffer, with "..." appended if it overflowed.
|
||||||
func (b *limitedBuffer) String() string {
|
func (b *limitedBuffer) String() string {
|
||||||
|
b.mu.Lock()
|
||||||
|
defer b.mu.Unlock()
|
||||||
|
|
||||||
out := b.buf.String()
|
out := b.buf.String()
|
||||||
if b.truncated {
|
if b.truncated {
|
||||||
out = out + "..."
|
out = out + "..."
|
||||||
|
|
Loading…
Reference in a new issue