cpr icon indicating copy to clipboard operation
cpr copied to clipboard

The max_threads parameter of async::startup is not affect

Open portsip opened this issue 10 months ago • 1 comments

Description

I've tried the below settings: cpr::async::startup(4,10); But if launching massive POST requests to the CPR at the same time, after a while, the cpr::GlobalThreadPool::GetInstance()->GetIdelThreadm() output the value is greater than the 10.

I've taken a look at the source code, I think there needs to be a lock added when determining the thread numbers to create a new thread if the Submit is called concurrently:

    auto Submit(Fn&& fn, Args&&... args) {
        if (status == STOP) {
            Start();
        }
        if (idle_thread_num <= 0 && cur_thread_num < max_thread_num) {
            CreateThread();
        }

Example/How to Reproduce

Just launching massive POST requests at the same time, then after a while, output the cpr::GlobalThreadPool::GetInstance()->GetIdelThreadm() .

Possible Fix

No response

Where did you get it from?

conan

Additional Context/Your Environment

  • OS: Windows 10, Debian 12
  • Version: Windows 10, Debian 12

portsip avatar Mar 08 '25 09:03 portsip

Fixed by: https://github.com/libcpr/cpr/pull/1168

COM8 avatar Mar 20 '25 14:03 COM8