Merge pull request #180 from WeidiDeng/non-blocking

Add non-blocking notes
This commit is contained in:
Guillaume J. Charmes
2023-12-09 08:54:43 -05:00
committed by GitHub
3 changed files with 9 additions and 6 deletions

View File

@@ -57,4 +57,4 @@ jobs:
# Run the tests again 100 times without verbose.
- if: ${{ matrix.go_version != '1.6.x' }}
name: Many Tests
run: go test -count=100 -timeout=10s
run: go test -count=100 -timeout=30s

View File

@@ -10,7 +10,7 @@ go get github.com/creack/pty
## Examples
Note that those examples are for demonstration purpose only, to showcase how to use the library. They are not meant to be used in any kind of production environment.
Note that those examples are for demonstration purpose only, to showcase how to use the library. They are not meant to be used in any kind of production environment. If you want to **set deadlines to work** and `Close()` **interrupting** `Read()` on the returned `*os.File`, you will need to call `syscall.SetNonblock` manually.
### Command

View File

@@ -9,6 +9,7 @@ import (
"os"
"runtime"
"sync"
"syscall"
"testing"
"time"
)
@@ -28,9 +29,10 @@ var glTestFdLock sync.Mutex
//
//nolint:paralleltest // Potential in (*os.File).Fd().
func TestReadDeadline(t *testing.T) {
t.Skip("Disabling while investigating race.")
ptmx, success := prepare(t)
if err := syscall.SetNonblock(int(ptmx.Fd()), true); err != nil {
t.Fatalf("Error: set non block: %s", err)
}
if err := ptmx.SetDeadline(time.Now().Add(timeout / 10)); err != nil {
if errors.Is(err, os.ErrNoDeadline) {
@@ -59,9 +61,10 @@ func TestReadDeadline(t *testing.T) {
//
//nolint:paralleltest // Potential in (*os.File).Fd().
func TestReadClose(t *testing.T) {
t.Skip("Disabling while investigating race.")
ptmx, success := prepare(t)
if err := syscall.SetNonblock(int(ptmx.Fd()), true); err != nil {
t.Fatalf("Error: set non block: %s", err)
}
go func() {
time.Sleep(timeout / 10)