Skip to content

Fix async hang on failure (and other asyncio fixes)

Plus a couple of commits from !381 (closed)

commit 73911c9b

utils: fix spammy BlockingIOError on older python versions

Python < 3.8 used SIGCHLD to reap child proceses and would poll every
process on every SIGCHLD (asyncio.SafeChildWatcher).  This may become
overwhelming with lots of short-lived processes.  We don't actually
need this functionality of polling individual processes so we can use
the asyncio.FastChildWatcher instead.

We keep the default asyncio.ThreadedChildWatcher for python 3.8 as it
does not produce BlockingIOError

commit bf48611b

cerbero: Use a list for the download command, not a string

We split the string immediately in async_call, so no point doing this.
Just pass a list from the start, which also avoids shell quoting
issues.

commit 93d1c947

cerbero: Log download output to a the fetch log

Not sure how this was missed all this time! The output from fetch to
stdout is unreadable when we download several recipes in parallel,
which is the default.

commit 267fd3ee

oven: fix 'rebuild recipe' on failure

We cannot use the same logic as 'retry failed step' and need to
propagate the retry intention upwards where it reinserted into the queue
of to build recipes.

commit a7ca5b5d

utils: handle nested run_tasks()

As used when building universal variants (ios, android)

We need to propagate the CancelledError from the sub-run_tasks() to the
parent run_tasks() so that the parent knows to stop rather than
continuing.

We attempt to avoid raising the CancelledError if another exception
is thrown somewhere else as a task being cancelled is not an
interesting result from a failure.

Merge request reports