timeout: Warn if the thread did not exit.
timeout: Warn if the thread did not exit.

As noted in the docstring for this function, the timeout is
best-effort only -- if the thread is blocked in a syscall, it will not
service the exception until it returns.  It can also choose to catch
and ignore the TimeoutExpired; in either case it will still be running
even after the `timeout()` function returns.

Raising a vare TimeoutExpired it still somewhat accurate, but obscures
that the backend thread may still be running along merrily.  Notice
such cases, and log a warning about them.

zulip/zulip,zulip/zulip,andersk/zulip,andersk/zulip,zulip/zulip,rht/zulip,rht/zulip,rht/zulip,zulip/zulip,zulip/zulip,rht/zulip,rht/zulip,andersk/zulip,rht/zulip,andersk/zulip,zulip/zulip,andersk/zulip,andersk/zulip,andersk/zulip,zulip/zulip,rht/zulip