start waiting end waiting flush() broadcasted joined --flush() start waiting close_audio() broadcasted end waiting joined --close_audio() start waiting end waiting flush() broadcasted joined --flush() start waiting flush() broadcasted end waiting joined --flush() start waiting end waiting flush() broadcasted joined --flush() start waiting end waiting flush() broadcasted joined --flush() drain() broadcasted flush() broadcasted joined --drain() start waiting