func onError() {
    ...
    e.waitCh <- &drivers.ExitResult
}
 
waitCh is defined as
func newDtleTaskHandle() {
		waitCh:      make(chan *drivers.ExitResult, 1),
}
 
and read only once
func handleWait() {
	case result := <-handle.waitCh:
}
 
A concurrent call to onError might block on waitCh forever.