From: Daniel Stenberg Date: Tue, 3 Mar 2020 07:10:09 +0000 (+0100) Subject: pause: return early for calls that don't change pause state X-Git-Tag: curl-7_69_1~33 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=64258bd0aa6ad23195f6be32e6febf7439ab7984;p=thirdparty%2Fcurl.git pause: return early for calls that don't change pause state Reviewed-by: Patrick Monnerat Ref: #4833 Closes #5026 --- diff --git a/lib/easy.c b/lib/easy.c index 454621076a..2446557f4d 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;