diff options
author | Eric Wong <e@80x24.org> | 2023-09-06 00:08:26 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2023-09-07 00:48:40 +0000 |
commit | 50c7179e5ed4c6c9d0d1e7b23592669e4b3dcd01 (patch) | |
tree | c67285fe3c2317bf2374803b0f8c27dd0c04d918 /t/watch_filter_rubylang.t | |
parent | 49898510175f0e9ea62bea83fb333c85b8278362 (diff) | |
download | public-inbox-50c7179e5ed4c6c9d0d1e7b23592669e4b3dcd01.tar.gz |
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.
Diffstat (limited to 't/watch_filter_rubylang.t')
-rw-r--r-- | t/watch_filter_rubylang.t | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/t/watch_filter_rubylang.t b/t/watch_filter_rubylang.t index 004e794e..643dbb8a 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; |