Wave-3 review gate: contract conformance clean; two findings fixed inline — substrate boundary move (open_writer_connection → seam.rs), writer-slot release on with_writer/begin/commit error arms + regression tests (task review-wave-3)
This commit is contained in:
1 parent
a82c543b40
commit
ecb8211694
8 files changed
+290
-34
No files matched your search
@@ -70,9 +70,13 @@ impl SqliteTxHandle {
|
||||
"the store is closed: writer slot unavailable",
|
||||
))
|
||||
})?;
|
||||
conn.execute_batch("BEGIN IMMEDIATE")
|
||||
.map_err(sqlite_error)
|
||||
.map(|_| conn)
|
||||
match conn.execute_batch("BEGIN IMMEDIATE").map_err(sqlite_error) {
|
||||
Ok(()) => Ok(conn),
|
||||
Err(e) => {
|
||||
writer2.release(conn);
|
||||
Err(e)
|
||||
}
|
||||
}
|
||||
})
|
||||
.await?;
|
||||
Ok(Box::new(SqliteTxHandle {
|
||||
@@ -387,12 +391,23 @@ impl TxHandle for SqliteTxHandle {
|
||||
return Box::pin(async { Err(Error::Closed) });
|
||||
};
|
||||
let writer = self.writer.clone();
|
||||
let writer_reopen = self.reopen.clone();
|
||||
Box::pin(async move {
|
||||
blocking(move || {
|
||||
conn.execute_batch("COMMIT").map_err(sqlite_error)?;
|
||||
writer.release(conn);
|
||||
Ok(())
|
||||
})
|
||||
blocking(
|
||||
move || match conn.execute_batch("COMMIT").map_err(sqlite_error) {
|
||||
Ok(()) => {
|
||||
writer.release(conn);
|
||||
Ok(())
|
||||
}
|
||||
Err(e) => {
|
||||
drop(conn);
|
||||
if let Ok(fresh) = (writer_reopen)() {
|
||||
writer.release(fresh);
|
||||
}
|
||||
Err(e)
|
||||
}
|
||||
},
|
||||
)
|
||||
.await
|
||||
})
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user