From 50c7179e5ed4c6c9d0d1e7b23592669e4b3dcd01 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 6 Sep 2023 00:08:26 +0000 Subject: [PATCH] t/watch_filter_rubylang.t: DS->Reset to avoid segfault Object destruction order needs to be managed manually here to avoid an occasional segfault at _rthread_mutex_timedlock() with the following callstack: XS_DBI_dispatch() XS_DBD__SQLite__st_DESTROY() sqlite_st_destroy() sqlite3_finalize() _rthread_mutex_timedlock() ...on OpenBSD 7.3 (Perl 5.36, DBD::SQLite 1.70v0, DBI 1.643p0, sqlite 3.41.0). I'm not sure exactly where the bug is, but I suspect it's something inherent in Perl's unpredictable destruction order at process teardown (something I've had to workaround in the past when dealing with XS extensions). There's no downloadable debug-* OpenBSD packages to ease debugging for these components, either. --- t/watch_filter_rubylang.t | 3 +++ 1 file changed, 3 insertions(+) diff --git a/t/watch_filter_rubylang.t b/t/watch_filter_rubylang.t index 004e794ec..643dbb8a6 100644 --- a/t/watch_filter_rubylang.t +++ b/t/watch_filter_rubylang.t @@ -99,6 +99,9 @@ EOF } $w->scan('full'); + # ensure orderly destruction to avoid SQLite segfault: + PublicInbox::DS->Reset; + $cfg = PublicInbox::Config->new(\$orig); $ibx = $cfg->lookup_name($v); $ibx->{-no_fsync} = 1; -- 2.47.3