Skip to content

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

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

Activity

  1. COM8 commented on Mar 20, 2025

    @COM8
    Member

    Fixed by: #1168

  2. added this to the CPR 1.12.0 milestone on Mar 20, 2025
  3. modified the milestones: CPR 1.12.0, 1.13.0 on Jun 14, 2025
  4. modified the milestones: CPR 1.13.0, CPR 1.15.0 on Nov 29, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions