I have a number of concerns about how await and free interact, and I'm finding it surprisingly hard to find anything more than elementary "Here's how to use await" instructions online. If you know of a document that goes into enough detail to answer these questions, that would be great.
Suppose a coroutine awaits a signal from another node, which gets freed before sending the signal. Obviously the coroutine will never continue executing. Is the engine smart enough to clean up the memory used to store its internal state (I'm told this is called a GDScriptFunctionState?), or will it hang around indefinitely? If the latter, will it get cleaned up when the node containing the coroutine gets freed? Does it make a difference if the thing that the coroutine is waiting on is another coroutine rather than a signal?