libsql: Use RwLock instead of RefCell for local connection (#2118)
The `local::Connection` struct has the following safety comments:
```rust
// SAFETY: This is safe because we compile sqlite3 w/ SQLITE_THREADSAFE=1
unsafe impl Send for Connection {}
// SAFETY: This is safe because we compile sqlite3 w/ SQLITE_THREADSAFE=1
unsafe impl Sync for Connection {}
```
This is correct with respect to the `*mut ffi::sqlite3` field, but NOT
with respect to the `RefCell<Option<AuthHook>>` field. RefCell is not
thread safe. Heavy load in a real application using local databases
occasionally sees panics due to concurrent access to this RefCell.
I don't have a simple repro right now, but this change eliminated the
panics for me. Let me know if you'd like some extra work done like a
repro or tests (not sure I'll have time but I will try..) P
Pekka Enberg committed
a9c66e079d774e7e0154f2106f9b7a481e0b1fd4
Committed by GitHub <noreply@github.com>
on 7/29/2025, 10:20:17 AM