From ff1d3ba7afd26cec74c413983bfad21e04c63c9f Mon Sep 17 00:00:00 2001 From: MJY-HUST Date: Fri, 9 Aug 2024 00:42:46 +0800 Subject: [PATCH 1/2] fix gflags validate error --- src/bthread/bthread.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bthread/bthread.cpp b/src/bthread/bthread.cpp index 14954e4ba6..3e1ffefb28 100644 --- a/src/bthread/bthread.cpp +++ b/src/bthread/bthread.cpp @@ -40,7 +40,7 @@ DEFINE_int32(bthread_min_concurrency, 0, DEFINE_int32(bthread_current_tag, BTHREAD_TAG_DEFAULT, "Set bthread concurrency for this tag"); -DEFINE_int32(bthread_concurrency_by_tag, 0, +DEFINE_int32(bthread_concurrency_by_tag, 8 + BTHREAD_EPOLL_THREAD_NUM, "Number of pthread workers of FLAGS_bthread_current_tag"); static bool never_set_bthread_concurrency = true; @@ -153,7 +153,7 @@ static bool validate_bthread_current_tag(const char*, int32_t val) { BAIDU_SCOPED_LOCK(bthread::g_task_control_mutex); auto c = bthread::get_task_control(); if (c == NULL) { - FLAGS_bthread_concurrency_by_tag = 0; + FLAGS_bthread_concurrency_by_tag = 8 + BTHREAD_EPOLL_THREAD_NUM; return true; } FLAGS_bthread_concurrency_by_tag = c->concurrency(val); From a47fdd55003c05f95b0d4d6223b08bb6a953327c Mon Sep 17 00:00:00 2001 From: MJY-HUST Date: Sun, 18 Aug 2024 14:44:58 +0800 Subject: [PATCH 2/2] update --- src/bthread/bthread.cpp | 15 +++++++-------- test/bthread_setconcurrency_unittest.cpp | 3 +-- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/bthread/bthread.cpp b/src/bthread/bthread.cpp index 3e1ffefb28..0cbe628cda 100644 --- a/src/bthread/bthread.cpp +++ b/src/bthread/bthread.cpp @@ -38,13 +38,12 @@ DEFINE_int32(bthread_min_concurrency, 0, " The laziness is disabled when this value is non-positive," " and workers will be created eagerly according to -bthread_concurrency and bthread_setconcurrency(). "); -DEFINE_int32(bthread_current_tag, BTHREAD_TAG_DEFAULT, "Set bthread concurrency for this tag"); +DEFINE_int32(bthread_current_tag, BTHREAD_TAG_INVALID, "Set bthread concurrency for this tag"); DEFINE_int32(bthread_concurrency_by_tag, 8 + BTHREAD_EPOLL_THREAD_NUM, "Number of pthread workers of FLAGS_bthread_current_tag"); static bool never_set_bthread_concurrency = true; -static bool never_set_bthread_concurrency_by_tag = true; static bool validate_bthread_concurrency(const char*, int32_t val) { // bthread_setconcurrency sets the flag on success path which should @@ -147,7 +146,9 @@ static bool validate_bthread_min_concurrency(const char*, int32_t val) { } static bool validate_bthread_current_tag(const char*, int32_t val) { - if (val < BTHREAD_TAG_DEFAULT || val >= FLAGS_task_group_ntags) { + if (val == BTHREAD_TAG_INVALID) { + return true; + } else if (val < BTHREAD_TAG_DEFAULT || val >= FLAGS_task_group_ntags) { return false; } BAIDU_SCOPED_LOCK(bthread::g_task_control_mutex); @@ -385,12 +386,10 @@ int bthread_getconcurrency_by_tag(bthread_tag_t tag) { } int bthread_setconcurrency_by_tag(int num, bthread_tag_t tag) { - if (bthread::never_set_bthread_concurrency_by_tag) { - bthread::never_set_bthread_concurrency_by_tag = false; + if (tag == BTHREAD_TAG_INVALID) { return 0; - } - if (tag < BTHREAD_TAG_DEFAULT || tag >= FLAGS_task_group_ntags) { - return EPERM; + } else if (tag < BTHREAD_TAG_DEFAULT || tag >= FLAGS_task_group_ntags) { + return EINVAL; } auto c = bthread::get_or_new_task_control(); BAIDU_SCOPED_LOCK(bthread::g_task_control_mutex); diff --git a/test/bthread_setconcurrency_unittest.cpp b/test/bthread_setconcurrency_unittest.cpp index e2be4ca716..7c8faf401c 100644 --- a/test/bthread_setconcurrency_unittest.cpp +++ b/test/bthread_setconcurrency_unittest.cpp @@ -199,7 +199,7 @@ int current_tag(int tag) { } TEST(BthreadTest, current_tag) { - ASSERT_EQ(false, current_tag(-1)); + ASSERT_EQ(false, current_tag(-2)); ASSERT_EQ(true, current_tag(0)); ASSERT_EQ(false, current_tag(1)); } @@ -213,7 +213,6 @@ int concurrency_by_tag(int num) { } TEST(BthreadTest, concurrency_by_tag) { - ASSERT_EQ(concurrency_by_tag(1), true); ASSERT_EQ(concurrency_by_tag(1), false); auto con = bthread_getconcurrency_by_tag(0); ASSERT_EQ(concurrency_by_tag(con), true);