Skip to content

Commit 18a855c

Browse files
etrclaude
andcommitted
CI: skip doxygen on Windows MINGW64 + extend stress-test budget
Two remaining failures from the previous run: 1. Windows MINGW64 timed out at the 6h ceiling. After my earlier check-readme CRLF fix unblocked that target, the next step on the make check-local pipeline (check-doxygen.sh -> make doxygen-run) wedged on a cmd.exe "Terminate batch job (Y/N)?" prompt produced by the autoconf-archive doxygen recipe under MSYS2/MINGW. The Linux lanes already exhaustively check the doxygen invariant, so drop doxygen+graphviz from the MINGW64 package list; check-doxygen detects the missing tool and self-skips (already designed for it). 2. route_table_concurrency cycles I and J failed under the valgrind memcheck lane with writer_ops=0 — the 500ms wall budget that the test relies on for at least one iteration is too tight when each register_path()/regex compile is running under heavy valgrind instrumentation. Keep the 500ms baseline but, if either counter is still zero, sleep in 100ms chunks up to a 30s ceiling. Normal lanes are unaffected (counters cross zero in well under 500ms); valgrind reliably converges within a couple seconds. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent e6d7dcc commit 18a855c

2 files changed

Lines changed: 27 additions & 4 deletions

File tree

.github/workflows/verify-build.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,13 @@ jobs:
388388
- name: Install MinGW64 packages
389389
if: ${{ matrix.os-type == 'windows' && matrix.msys-env == 'MINGW64' }}
390390
run: |
391-
pacman --noconfirm -S --needed mingw-w64-x86_64-{toolchain,libtool,make,pkg-config,libsystre,doxygen,gnutls,graphviz,curl}
391+
# NB: doxygen + graphviz intentionally excluded — `make check-local`
392+
# invokes scripts/check-doxygen.sh which spawns `make doxygen-run`,
393+
# and the autoconf-archive-generated MINGW recipe hangs indefinitely
394+
# waiting on a cmd.exe batch prompt (job timed out at the 6h ceiling
395+
# in CI). The doxygen invariant is exhaustively checked by the Linux
396+
# lanes; Windows just builds and tests the library here.
397+
pacman --noconfirm -S --needed mingw-w64-x86_64-{toolchain,libtool,make,pkg-config,libsystre,gnutls,curl}
392398
393399
- name: Install MSYS packages
394400
if: ${{ matrix.os-type == 'windows' && matrix.msys-env == 'MSYS' }}

test/integ/route_table_concurrency.cpp

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,20 @@ LT_BEGIN_AUTO_TEST(route_table_concurrency_suite,
117117
});
118118
}
119119

120-
// Run for ~500ms. Long enough to cover several context-switch
121-
// windows on a loaded box; short enough that `make check` stays
122-
// under one second.
120+
// Run for ~500ms baseline (long enough to cover several context-
121+
// switch windows; short enough that `make check` stays under a
122+
// second on a normal box). Then keep going in 100ms chunks until
123+
// both counters are non-zero, up to a 30s safety ceiling — this
124+
// keeps the test reliable on heavily-instrumented lanes such as
125+
// valgrind/memcheck where a single register_path+regex-compile
126+
// can take longer than the entire baseline window.
127+
auto deadline =
128+
std::chrono::steady_clock::now() + std::chrono::seconds(30);
123129
std::this_thread::sleep_for(std::chrono::milliseconds(500));
130+
while ((writer_ops.load() == 0 || reader_ops.load() == 0)
131+
&& std::chrono::steady_clock::now() < deadline) {
132+
std::this_thread::sleep_for(std::chrono::milliseconds(100));
133+
}
124134
stop.store(true, std::memory_order_relaxed);
125135
for (auto& t : threads) t.join();
126136

@@ -202,7 +212,14 @@ LT_BEGIN_AUTO_TEST(route_table_concurrency_suite,
202212
});
203213
}
204214

215+
// Same baseline + valgrind-tolerant extension as Cycle I above.
216+
auto deadline2 =
217+
std::chrono::steady_clock::now() + std::chrono::seconds(30);
205218
std::this_thread::sleep_for(std::chrono::milliseconds(500));
219+
while ((writer_ops.load() == 0 || reader_ops.load() == 0)
220+
&& std::chrono::steady_clock::now() < deadline2) {
221+
std::this_thread::sleep_for(std::chrono::milliseconds(100));
222+
}
206223
stop.store(true, std::memory_order_relaxed);
207224
for (auto& t : threads) t.join();
208225

0 commit comments

Comments
 (0)