Description
Version
List the versions of all tokio
crates you are using. The easiest way to get
this information is using cargo tree
subcommand:
1.37.0
Platform
The output of uname -a
(UNIX), or version and 32 or 64-bit (Windows)
Linux
Description
We're using a lot the block_in_place
+ block_on
pattern described in #5843 . It has many caveats, but it seems to work OK for us, as a async drop
workaround.
However today I'm debugging a hang on shutdown. Basically Runtime
is dropping and the whole process hangs. When I attach to gdb
I can see that only a handful worker threads remain, and a timer thread as well. All worker threads seems to be inside block_in_place
+ block_on
section, park
ed, waiting for something to wake them up, but I don't think there's any thread left to actually poll the event loop anymore.
I don't know how well supported this pattern should be, and I might be wrong about the whole thing altogether, but it seems to me that if tokio
just reserved a single worker for the purpose of polling events and shut it down last, or somehow just avoided getting all worker threads block_in_place
d, or shut down the event polling thread last (if a dedicated thread is used) the whole thing would just work.