in gdbclient/internal/pool/conn.go [115:136]
func (cn *ConnWebSocket) Close() {
if !atomic.CompareAndSwapUint32(&cn._closed, 0, 1) {
return
}
// close chan quit to wakeup all goroutine
close(cn.closeCn)
// close connection
cn.netConn.Close()
// fill complete all pending response future
cn.pendingResponses.Range(func(key, value interface{}) bool {
response := graphsonv3.NewErrorResponse(key.(string),
graphsonv3.RESPONSE_STATUS_REQUEST_ERROR_DELIVER, cn.lastIoError)
value.(*graphsonv3.ResponseFuture).Complete(response)
return true
})
atomic.StoreInt32(&cn.pendingSize, 0)
cn.pendingResponses = &sync.Map{}
internal.Logger.Info("connect close", zapPtr(cn))
}