This commit is contained in:
Eric Wu 2026-07-30 18:18:30 +08:00 committed by GitHub
commit e204abf4c3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 12 additions and 3 deletions

View file

@ -86,7 +86,8 @@ static void multi_xfer_tbl_dump(struct Curl_multi *multi);
static const struct curltime *multi_now(struct Curl_multi *multi)
{
curlx_pnow(&multi->now);
if(!multi->processing_socket)
curlx_pnow(&multi->now);
return &multi->now;
}
@ -3266,6 +3267,9 @@ static CURLMcode multi_socket(struct Curl_multi *multi,
(void)ev_bitmask;
sigpipe_init(&pipe_ctx);
curlx_pnow(&multi->now);
multi->processing_socket = TRUE;
if(checkall) {
/* *perform() deals with running_handles on its own */
mresult = multi_perform(multi, running_handles);
@ -3298,7 +3302,7 @@ static CURLMcode multi_socket(struct Curl_multi *multi,
goto out;
}
multi_mark_expired_as_dirty(multi, multi_now(multi));
multi_mark_expired_as_dirty(multi, &multi->now);
mresult = multi_run_dirty(multi, &pipe_ctx, &run_xfers);
if(mresult)
goto out;
@ -3329,6 +3333,7 @@ out:
if(CURLM_OK >= mresult)
mresult = Curl_update_timer(multi);
multi->processing_socket = FALSE;
return mresult;
}
@ -3730,7 +3735,10 @@ void Curl_expire_ex(struct Curl_easy *data,
DEBUGASSERT(id < EXPIRE_LAST);
set = *Curl_pgrs_now(data);
if(multi->processing_socket)
set = multi->now;
else
curlx_pnow(&set);
set.tv_sec += (time_t)(milli / 1000); /* may be a 64 to 32-bit conversion */
set.tv_usec += (int)(milli % 1000) * 1000;

View file

@ -206,6 +206,7 @@ struct Curl_multi {
BIT(xfer_buf_borrowed); /* xfer_buf is currently being borrowed */
BIT(xfer_ulbuf_borrowed); /* xfer_ulbuf is currently being borrowed */
BIT(xfer_sockbuf_borrowed); /* xfer_sockbuf is currently being borrowed */
BIT(processing_socket);
BIT(quick_exit); /* do not join threads on cleanup */
#ifdef DEBUGBUILD
BIT(warned); /* true after user warned of DEBUGBUILD */