While trying to repro a separate issue, I noticed that tests that use checkpoint_thread occasionally hit a C assertion if they're failing in Python.
The issue is that we spin up a separate checkpoint thread but if we fail in Python before reaching the ckpt.join(), we'll close the connection mid-checkpoint which is not allowed. Our API doesn't allow users to be doing things with the engine from other threads if they're closing the connection.
(lldb) bt * thread #1, name = 'python', stop reason = signal SIGABRT * frame #0: 0x00007ffff7a22f47 libc.so.6`__GI_raise(sig=2) at raise.c:51 frame #1: 0x00007ffff7a248b1 libc.so.6`__GI_abort at abort.c:79 frame #2: 0x00007ffff594d65f libwiredtiger-10.0.0.so`__wt_abort(session=0x00005555561d27e0) at os_abort.c:30 frame #3: 0x00007ffff59b752e libwiredtiger-10.0.0.so`__session_rollback_transaction(wt_session=0x00005555561d27e0, config=0x0000000000000000) at session_api.c:1724 frame #4: 0x00007ffff587589d libwiredtiger-10.0.0.so`__conn_close(wt_conn=0x0000555555ed0630, config=0x0000000000000000) at conn_api.c:1034 frame #5: 0x00007ffff5c8f623 _wiredtiger.so`_wrap_Connection_close(self=0x0000000000000000, args=0x00007ffff6c523d0) at wiredtiger_wrap.c:8724
And more specifically:
WT_ASSERT(session, (s)->id == 0 || (s)->api_tid == 0 || (s)->api_tid == __tmp_api_tid); \