Skip to content

The max_threads parameter of async::startup is not affect #1195

@portsip

Description

@portsip

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions