From 6d4d8eb81d2f1bd2ad428df3b1b242bdee890eeb Mon Sep 17 00:00:00 2001 From: Rongsong Shen Date: Thu, 7 May 2026 09:08:03 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20rename=20delaymgr=20precision=E2=86=92p?= =?UTF-8?q?recision=5Fms,=20replace=20sleep()=20with=20nanosleep()=20(P0-2?= =?UTF-8?q?b)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rename `precision` field to `precision_ms` in delaymgr_t struct (delay.h) - Replace `sleep(mgr->precision)` with `nanosleep()` for 10ms granularity (delay.c) - Add `#include ` to delay.c (already in delay.h) - Update delaymgr_init() to store precision_ms parameter - Update all call sites: cluster.c (2→200ms), controller/testsuite/test.c (2→2000ms), lib/testsuite/test_delay.c (1→1000ms) - Add TDD test test_delaymgr_precision_ms_field verifying field exists and stores correctly - delay_task() delay parameter remains in seconds; only sleep granularity changes --- src/controller/cluster.c | 2 +- src/controller/testsuite/test.c | 2 +- src/include/delay.h | 2 +- src/lib/delay.c | 8 ++++++-- src/lib/testsuite/test_delay.c | 15 ++++++++++++++- 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/controller/cluster.c b/src/controller/cluster.c index f369f10..c4b4a72 100644 --- a/src/controller/cluster.c +++ b/src/controller/cluster.c @@ -605,7 +605,7 @@ int cluster_init(cluster_t* c) vtaskmgr_init(&(c->vtaskmgr), c->myconf->cluster_config->vcpus); - delaymgr_init(&(c->delaymgr), 2, run_delay_tasks); + delaymgr_init(&(c->delaymgr), 200 /* precision_ms */, run_delay_tasks); apiserver_init(c); diff --git a/src/controller/testsuite/test.c b/src/controller/testsuite/test.c index 081d8a9..915deb1 100644 --- a/src/controller/testsuite/test.c +++ b/src/controller/testsuite/test.c @@ -403,7 +403,7 @@ int cmd_worker(int argc, char* argv[]) active_ctx = &workerctx; - delaymgr_init(&delaymgr, 2, NULL); + delaymgr_init(&delaymgr, 2000 /* precision_ms */, NULL); delaymgr_start(&delaymgr); delay_task(&delaymgr, 5, -1, (delay_task_entry_fn_t)worker_house_keeping, &workerctx); diff --git a/src/include/delay.h b/src/include/delay.h index 90e0b73..19a306d 100644 --- a/src/include/delay.h +++ b/src/include/delay.h @@ -23,7 +23,7 @@ typedef struct { typedef struct { pthread_t worker; int running; - int precision; + int precision_ms; task_run_fn_t runner_fn; timer_t timerid; ordq_t tasks; diff --git a/src/lib/delay.c b/src/lib/delay.c index f2180db..28fcba8 100644 --- a/src/lib/delay.c +++ b/src/lib/delay.c @@ -3,6 +3,7 @@ #include #include #include +#include #include "delay.h" #include "utils.h" @@ -17,7 +18,10 @@ static void* delay_worker(void* args) time_t now; pthread_testcancel(); - sleep(mgr->precision); + { + struct timespec ts = { 0, (long)mgr->precision_ms * 1000000L }; + nanosleep(&ts, NULL); + } it = ordq_peek(&(mgr->tasks), NULL); if (it == NULL) { @@ -100,7 +104,7 @@ int delaymgr_init(delaymgr_t* mgr, int precision, task_run_fn_t runner_fn) runner_fn = default_runner_fn; } - mgr->precision = precision; + mgr->precision_ms = precision; mgr->running = 0; mgr->runner_fn = runner_fn; mgr->worker = 0; diff --git a/src/lib/testsuite/test_delay.c b/src/lib/testsuite/test_delay.c index 08214fe..96acd35 100644 --- a/src/lib/testsuite/test_delay.c +++ b/src/lib/testsuite/test_delay.c @@ -26,7 +26,7 @@ static void test_delay1() int delay_period = 2; time_t t_start = time(NULL); - delaymgr_init(&mgr, 1, NULL); + delaymgr_init(&mgr, 1000 /* precision_ms */, NULL); delaymgr_start(&mgr); delay_task(&mgr, delay_period, runcount, (delay_task_entry_fn_t)delay_work, &count); @@ -48,9 +48,22 @@ static void test_delay1() return; } +static void test_delaymgr_precision_ms_field(void) +{ + delaymgr_t mgr; + memset(&mgr, 0, sizeof(mgr)); + /* precision_ms field must exist and be stored correctly */ + int rc = delaymgr_init(&mgr, 200 /* precision_ms */, NULL); + TEST_ASSERT_EQUAL_INT(0, rc); + TEST_ASSERT_EQUAL_INT(200, mgr.precision_ms); + delaymgr_fini(&mgr); + printf("test_delaymgr_precision_ms_field: PASS\n"); +} + void test_delay(void) { printf("\n>> delay test\n\n"); RUN_TEST(test_delay1); + RUN_TEST(test_delaymgr_precision_ms_field); }