We also need to add the time it could take to shut down non executor threads since there can be any number of those and they could be in a similar state. These are far less likely common since most of the problematic code seems to be run in the executor. This is of course limited to my testing and I don't have a lot of custom components running so I expect it's actually worse in the wild.