Add locks to safelog

The safelog Write function can be called from multiple go routines, and
it was not thread safe. These locks in particular allow us to pass the
logscrubber's output io.Writer to other libraries, such as pion.
This commit is contained in:
Cecylia Bocovich 2019-09-13 12:26:27 -04:00
parent f3be34a459
commit 3c28380bc6

View file

@ -7,6 +7,7 @@ import (
"bytes" "bytes"
"io" "io"
"regexp" "regexp"
"sync"
) )
const ipv4Address = `\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}` const ipv4Address = `\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}`
@ -30,8 +31,13 @@ var addressRegexp = regexp.MustCompile(addressPattern)
type LogScrubber struct { type LogScrubber struct {
Output io.Writer Output io.Writer
buffer []byte buffer []byte
lock sync.Mutex
} }
func (ls *LogScrubber) Lock() { (*ls).lock.Lock() }
func (ls *LogScrubber) Unlock() { (*ls).lock.Unlock() }
func scrub(b []byte) []byte { func scrub(b []byte) []byte {
scrubbedBytes := b scrubbedBytes := b
for _, pattern := range scrubberPatterns { for _, pattern := range scrubberPatterns {
@ -45,6 +51,9 @@ func scrub(b []byte) []byte {
} }
func (ls *LogScrubber) Write(b []byte) (n int, err error) { func (ls *LogScrubber) Write(b []byte) (n int, err error) {
ls.Lock()
defer ls.Unlock()
n = len(b) n = len(b)
ls.buffer = append(ls.buffer, b...) ls.buffer = append(ls.buffer, b...)
for { for {