From 58004848f1e59b2cef8add95bf5d13063ce4e003 Mon Sep 17 00:00:00 2001 From: Niklas Janlert Date: Tue, 21 Nov 2017 13:40:00 +0100 Subject: Fix race in ExecContext When the context is cancelled, an interrupt should only be made if the operation is still ongoing. --- sqlite3.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'sqlite3.go') diff --git a/sqlite3.go b/sqlite3.go index a931735..c9edd40 100644 --- a/sqlite3.go +++ b/sqlite3.go @@ -1171,9 +1171,13 @@ func (s *SQLiteStmt) exec(ctx context.Context, args []namedValue) (driver.Result defer close(done) go func(db *C.sqlite3) { select { - case <-ctx.Done(): - C.sqlite3_interrupt(db) case <-done: + case <-ctx.Done(): + select { + case <-done: + default: + C.sqlite3_interrupt(db) + } } }(s.c.db) -- cgit v1.2.3