Fixes #12.
Makes a copy of the bytes we read from stdin and sends those to the processing goroutine instead of a slice from our scratch buffer. This avoids sharing the same underlying array data across goroutines.
This commit is contained in:
parent
9f21b09785
commit
4a8c31c50e
@ -12,6 +12,8 @@ import (
|
||||
const (
|
||||
logfile = "/tmp/go-prompt-debug.log"
|
||||
envEnableLog = "GO_PROMPT_ENABLE_LOG"
|
||||
|
||||
maxReadBytes = 1024
|
||||
)
|
||||
|
||||
// Executor is called when user input something text.
|
||||
@ -249,7 +251,7 @@ func (p *Prompt) tearDown() {
|
||||
}
|
||||
|
||||
func readBuffer(bufCh chan []byte, stopCh chan struct{}) {
|
||||
buf := make([]byte, 1024)
|
||||
buf := make([]byte, maxReadBytes)
|
||||
|
||||
log.Printf("[INFO] readBuffer start")
|
||||
for {
|
||||
@ -260,7 +262,9 @@ func readBuffer(bufCh chan []byte, stopCh chan struct{}) {
|
||||
return
|
||||
default:
|
||||
if n, err := syscall.Read(syscall.Stdin, buf); err == nil {
|
||||
bufCh <- buf[:n]
|
||||
cbuf := make([]byte, n)
|
||||
copy(cbuf, buf[:n])
|
||||
bufCh <- cbuf
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user