when use QueryContext,data trace appear,but I think there is no problem on
[go-sql-driver/go]。because QueryContext call initContextClose,
call awaitDone asynchronous.
when context timeout,awaitDone channel trigger。 will release buffer's
data when Next/Scan。
I think Rows.close(err) should add the judgment:
if err != nil && err != io.EOF {
rs.lasterr = err
return nil
}
or
if context.DeadlineExceeded == err {
rs.lasterr = err
return nil
}
then code below:
func (rs *Rows) close(err error) error {
rs.closemu.Lock()
defer rs.closemu.Unlock()
if err != nil && err != io.EOF {//throws context.DeadlineExceeded when
QueryContext's context timeout
rs.lasterr = err
return nil
}
if rs.closed {
return nil
}
rs.closed = true
if rs.lasterr == nil {
rs.lasterr = err
}
withLock(rs.dc, func() {
err = rs.rowsi.Close()
})
if fn := rowsCloseHook(); fn != nil {
fn(rs, &err)
}
if rs.cancel != nil {
rs.cancel()
}
if rs.closeStmt != nil {
rs.closeStmt.Close()
}
rs.releaseConn(err)
return err
}
because buffers provided to Rows.Next should not be modified by Rows.Close
<https://github.com/golang/go/commit/651ddbdb5056ded455f47f9c494c67b389622a47>
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.