search_sessions(), clear_messages(), delete_session(), and prune_sessions() all accessed self._conn without acquiring self._lock. Every other method in the class uses the lock. In multi-threaded contexts (gateway serving concurrent platform messages), these unprotected methods can cause sqlite3.ProgrammingError from concurrent cursor operations on the same connection.
35 KiB
35 KiB