mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-05-28 23:34:49 -05:00
New coroutine 'crMaybeWait' macros, which may not return.
The crWaitUntil macros have do-while type semantics, i.e. they always crReturn _at least_ once, and then perhaps more times if their termination condition is still not met. But sometimes a coroutine will want to wait for a condition that may _already_ be true - the key examples being non-emptiness of a bufchain or a PacketQueue, which may already be non-empty in spite of you having just removed something from its head. In that situation, it's obviously more convenient not to bother with a crReturn in the first place than to do one anyway and have to fiddle about with toplevel callbacks to make sure we resume later. So here's a new pair of macros crMaybeWaitUntil{,V}, which have the semantics of while rather than do-while, i.e. they test the condition _first_ and don't return at all if it's already met.
This commit is contained in:
parent
2ee07f8c71
commit
7400653bc8
2
ssh.c
2
ssh.c
@ -362,6 +362,8 @@ enum {
|
||||
#define crStopV do{ *crLine = 0; return; }while(0)
|
||||
#define crWaitUntil(c) do { crReturn(0); } while (!(c))
|
||||
#define crWaitUntilV(c) do { crReturnV; } while (!(c))
|
||||
#define crMaybeWaitUntil(c) do { while (!(c)) crReturn(0); } while (0)
|
||||
#define crMaybeWaitUntilV(c) do { while (!(c)) crReturnV; } while (0)
|
||||
|
||||
struct Packet;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user