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_go18_test.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'sqlite3_go18_test.go') diff --git a/sqlite3_go18_test.go b/sqlite3_go18_test.go index 2662fcf..44fc4df 100644 --- a/sqlite3_go18_test.go +++ b/sqlite3_go18_test.go @@ -134,3 +134,24 @@ func TestShortTimeout(t *testing.T) { t.Fatal(ctx.Err()) } } + +func TestExecCancel(t *testing.T) { + db, err := sql.Open("sqlite3", ":memory:") + if err != nil { + t.Fatal(err) + } + defer db.Close() + + if _, err = db.Exec("create table foo (id integer primary key)"); err != nil { + t.Fatal(err) + } + + for n := 0; n < 100; n++ { + ctx, cancel := context.WithCancel(context.Background()) + _, err = db.ExecContext(ctx, "insert into foo (id) values (?)", n) + cancel() + if err != nil { + t.Fatal(err) + } + } +} -- cgit v1.2.3