From: Eric Wong Date: Wed, 6 Sep 2023 00:08:26 +0000 (+0000) Subject: t/watch_filter_rubylang.t: DS->Reset to avoid segfault X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=50c7179e5ed4c6c9d0d1e7b23592669e4b3dcd01;p=thirdparty%2Fpublic-inbox.git 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. --- 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;