SIGN IN SIGN UP

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