Skip to content

Mynah 1.6.3

Latest

Choose a tag to compare

@l33tdawg l33tdawg released this 04 Aug 06:52

Searching works again.

Every question that reached for the web stopped dead. Mynah said it was looking, and then nothing came back until the six-minute stop fired and it admitted it had given up — three times in a row on one afternoon.

The page load and its own twenty-second timeout were being raced against each other in a way that reads correct and is not: the machinery holding the race cannot finish until both sides finish, so when the timeout won it cancelled the page load and then sat waiting for it. And a page load waiting on the browser engine does not stop because it was cancelled. Nothing ever came back.

It logged nothing at all while this happened, which is why it looked like the model hanging rather than the search. The only reason there was ever an answer is the stop added in 1.6.1.

The same mistake was in two other places, and one of them was in Google sign-in — where it would have hung for good rather than timing out. It has never been reported, and only because nobody had left the consent screen open long enough to find it. That is luck, not correctness.

All of them now let the timeout end the wait rather than race it: one waiter, one place that finishes it, whoever gets there first. There is a check that walks every piece of concurrency in the codebase looking for the pattern and fails the build if it reappears.

The update bar no longer offers "What's new".

It says one thing and offers one verb. The release notes are still a click away in the install window, which is where anybody actually after them is already looking.

And two tests that were not telling the truth.

One read the real clock against a fixture dated for one o'clock in the afternoon. It passed all morning, and at one o'clock it started failing — then crashed rather than failed. A test whose result depends on the hour it is run is not a test.

The other failed the last release build in CI by two and a half thousandths of a second on a machine we do not own. A red build that means "the runner was busy" teaches everybody to ignore red builds, and the next one will be real.

1775 tests, 0 failures. Notarized and stapled.