I *think* this is fine -- we'll block on the signal coming in before running the destructor -- but currently this is setup such that the Waiter is deconstructed and the `Thread` is dropped by the Drop for WaiterQueue; it seems like it would be beneficial to either:   * drop naturally here, avoiding the Cell entirely   * put the Waiter inside something like ManuallyDrop