diff options
| author | Daniel Stenberg <daniel@haxx.se> | 2020-03-03 08:10:09 +0100 | 
|---|---|---|
| committer | Daniel Stenberg <daniel@haxx.se> | 2020-03-06 10:25:40 +0100 | 
| commit | 64258bd0aa6ad23195f6be32e6febf7439ab7984 (patch) | |
| tree | 5113a007f5203515768f1d64c4d51c48d3dcb4fd | |
| parent | 485d4470d3b9c09a14e0853c0a00099c3229cbaf (diff) | |
pause: return early for calls that don't change pause state
Reviewed-by: Patrick Monnerat
Ref: #4833
Closes #5026
| -rw-r--r-- | lib/easy.c | 7 | 
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/easy.c b/lib/easy.c index 454621076..2446557f4 100644 --- a/lib/easy.c +++ b/lib/easy.c @@ -975,6 +975,7 @@ CURLcode curl_easy_pause(struct Curl_easy *data, int action)  {    struct SingleRequest *k = &data->req;    CURLcode result = CURLE_OK; +  int oldstate = k->keepon & (KEEP_RECV_PAUSE| KEEP_SEND_PAUSE);    /* first switch off both pause bits */    int newstate = k->keepon &~ (KEEP_RECV_PAUSE| KEEP_SEND_PAUSE); @@ -983,6 +984,12 @@ CURLcode curl_easy_pause(struct Curl_easy *data, int action)    newstate |= ((action & CURLPAUSE_RECV)?KEEP_RECV_PAUSE:0) |      ((action & CURLPAUSE_SEND)?KEEP_SEND_PAUSE:0); +  if((newstate & (KEEP_RECV_PAUSE| KEEP_SEND_PAUSE)) == oldstate) { +    /* Not changing any pause state, return */ +    DEBUGF(infof(data, "pause: no change, early return\n")); +    return CURLE_OK; +  } +    /* put it back in the keepon */    k->keepon = newstate;  | 
