    //          Th_A                             Th-B

    //    Coroutine A running                     R(B)
    //            #                                .
    //            #                                .
    //       callco(B,..)            ?----------   .
    //            |                             |  .
    //           R(A)                          ===L(B)===
    //            .                                |
    //            .    --------?                   |
    //            .   |                            |
    //        ===L(A)===                           |
    //            |                                |
    //           R(B)    )                         |
    //            .    --)------------------------U(B)    )
    //            .   |  )                         .      )
    //        ===L(B)=== ) unwait B                .      )
    //            |      )                         .      )
    //         unwait B--)----------------------   .      )
    //            |      )                      |  .      ) wait on B
    //            |      )                     ===W(B)=== )
    //            |      )                        R(B)    )
    //           U(B) ---)----------------------   .      )
    //            |                             |  .      )
    //            |                            ===L(B)=== )
    //           R(A)                              |
    //            .                                |
    //            .    --------?                   |
    //            .   |                            |
    //        ===L(A)===                           |
    //            |                                |
    //           U(A)----)----->                   |
    //            .      )           <------------U(B)
    //            .      )                         |
    //            .      )                 Coroutine B running
    //            .      )                         #
    //            .      )                         #
    //            .      )                      cowait(..)
    //            .      ) wait on A               |
    //            .      )                         |
    //            .      )                        R(A)    )
    //            .      )           -----------   .      )
    //            .      )                      |  .      )
    //            .      )                     ===L(A)=== ) unwait A
    //            .      )                         |      )
    //            .    --)----------------------unwait A  )
    //            .   |  )                         |      )
    //        ===W(A)=== )                         |      )
    //           R(A)    )                         |      )
    //            .    --)------------------------U(A)    )
    //            .   |  )                         |
    //        ===L(A)=== )                         |
    //            |                               R(B)
    //            |                  -----------   .
    //            |                             |  .
    //            |                            ===L(B)===
    //            |                                |      )
    //            |                               U(B)    )
    //            |                                .      )
    //           U(A)---------->                   .      )
    //            |                                .      )
    //     return from callco                      .      )
    //            #                                .      )
    //           etc                              etc     )
    //            .                                .      ) wait on B
    //            .                   ----------   .      )
    //            .                             |  .      )
    //            .                            ===W(B)=== )
    //            .                               R(B)    )
    //            .                   ----------   .      )
    //            .                             |  .      )
    //            .                            ===L(B)=== )
    //            .                                |
    //            .                   <-----------U(B)
    //            .                                |
    //            .                         return from cowait
    //            .                                #

