Keep the runner's borrow alive as long as the connection it reads

The first compile this branch had. One borrow error, in the four-thread
contention test: the `Runner` was the block's tail expression, and a
tail's temporaries are dropped after the block's locals, so it outlived
the `conn` it borrowed. Bound to a local, with the ordering rule written
down beside it -- it is exactly the shape someone tidies back.

Everything else stood: clippy clean at -D warnings, and all 18 runner
tests pass, including the four-thread four-connection claim and the
`UPDATE ... RETURNING` rewrite the author flagged as the riskiest line
in the diff.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-29 23:48:15 +02:00
co-authored by Claude Opus 5
parent 846a249156
commit 758436cc28
+7 -2
View File
@@ -853,11 +853,16 @@ mod tests {
let seen = seen.clone();
threads.push(std::thread::spawn(move || {
let conn = open(&path);
Runner::new(&conn)
// Bound to a local rather than left as the block's tail: the
// `Runner` borrows `conn`, and a tail expression's temporaries
// are dropped *after* the block's locals, so the borrow would
// outlive what it borrows.
let completed = Runner::new(&conn)
.with(recording(vec![JobKind::Thumbnail], seen))
.drain_all(0)
.unwrap()
.completed
.completed;
completed
}));
}