waitingForConn := make(chan struct{})
go func() {
+ defer close(afterPutConn)
+
conn, err := db.conn(ctx, alwaysNewConn)
- if err != nil {
- t.Fatal(err)
+ if err == nil {
+ db.putConn(conn, err, false)
+ } else {
+ t.Errorf("db.conn: %v", err)
}
- db.putConn(conn, err, false)
- close(afterPutConn)
}()
go func() {
+ defer close(waitingForConn)
+
for {
+ if t.Failed() {
+ return
+ }
db.mu.Lock()
ct := len(db.connRequests)
db.mu.Unlock()
if ct > 0 {
- close(waitingForConn)
return
}
time.Sleep(10 * time.Millisecond)
<-waitingForConn
+ if t.Failed() {
+ return
+ }
+
offsetMu.Lock()
if ec.expired {
offset = 11 * time.Second
go func() {
for i := 0; i < n; i++ {
syscall.WaitForSingleObject(event1, syscall.INFINITE)
- err := setEvent(event2)
- if err != nil {
- b.Fatal(err)
+ if err := setEvent(event2); err != nil {
+ b.Errorf("Set event failed: %v", err)
+ return
}
}
}()
for i := 0; i < n; i++ {
- err := setEvent(event1)
- if err != nil {
+ if err := setEvent(event1); err != nil {
b.Fatal(err)
}
+ if b.Failed() {
+ break
+ }
syscall.WaitForSingleObject(event2, syscall.INFINITE)
}
}