Skip to content

Commit 696e2e4

Browse files
authored
Merge pull request #530 from navytux/y/no-go-if-notneeded
Don't spawn interrupt goroutine if we know that context cannot be canceled
2 parents 2a20b89 + 00a23ba commit 696e2e4

File tree

1 file changed

+23
-19
lines changed

1 file changed

+23
-19
lines changed

sqlite3.go

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1124,18 +1124,20 @@ func (s *SQLiteStmt) query(ctx context.Context, args []namedValue) (driver.Rows,
11241124
done: make(chan struct{}),
11251125
}
11261126

1127-
go func(db *C.sqlite3) {
1128-
select {
1129-
case <-ctx.Done():
1127+
if ctxdone := ctx.Done(); ctxdone != nil {
1128+
go func(db *C.sqlite3) {
11301129
select {
1130+
case <-ctxdone:
1131+
select {
1132+
case <-rows.done:
1133+
default:
1134+
C.sqlite3_interrupt(db)
1135+
rows.Close()
1136+
}
11311137
case <-rows.done:
1132-
default:
1133-
C.sqlite3_interrupt(db)
1134-
rows.Close()
11351138
}
1136-
case <-rows.done:
1137-
}
1138-
}(s.c.db)
1139+
}(s.c.db)
1140+
}
11391141

11401142
return rows, nil
11411143
}
@@ -1169,19 +1171,21 @@ func (s *SQLiteStmt) exec(ctx context.Context, args []namedValue) (driver.Result
11691171
return nil, err
11701172
}
11711173

1172-
done := make(chan struct{})
1173-
defer close(done)
1174-
go func(db *C.sqlite3) {
1175-
select {
1176-
case <-done:
1177-
case <-ctx.Done():
1174+
if ctxdone := ctx.Done(); ctxdone != nil {
1175+
done := make(chan struct{})
1176+
defer close(done)
1177+
go func(db *C.sqlite3) {
11781178
select {
11791179
case <-done:
1180-
default:
1181-
C.sqlite3_interrupt(db)
1180+
case <-ctxdone:
1181+
select {
1182+
case <-done:
1183+
default:
1184+
C.sqlite3_interrupt(db)
1185+
}
11821186
}
1183-
}
1184-
}(s.c.db)
1187+
}(s.c.db)
1188+
}
11851189

11861190
var rowid, changes C.longlong
11871191
rv := C._sqlite3_step(s.s, &rowid, &changes)

0 commit comments

Comments
 (0)