Room 3 froze on a suspending @Transaction: the SQLite driver you pass picks your connection pool
Room 3 reads hasConnectionPool off the driver you hand setDriver(). AndroidSQLiteDriver returns true, so Room installs a passthrough pool holding exactly one thread-confined connection, and a suspending @Transaction can block there with no crash, no ANR and nothing in logcat. BundledSQLiteDriver returns false, so Room runs its own pool of four readers and one writer, and resets PRAGMA synchronous on every connection it opens.