From 1705daefa6384612bd06e170b7114fb763a2fbfd Mon Sep 17 00:00:00 2001 From: Khairul Azhar Kasmiran Date: Thu, 27 Feb 2025 21:14:19 +0800 Subject: [PATCH] search: Clear progress before results (#4943) --- librz/core/cmd/cmd_search.c | 5 +++++ librz/search/search.c | 9 ++++++--- test/db/cmd/cmd_search_z | 3 ++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/librz/core/cmd/cmd_search.c b/librz/core/cmd/cmd_search.c index 7f6d213c9db..687c23f2440 100644 --- a/librz/core/cmd/cmd_search.c +++ b/librz/core/cmd/cmd_search.c @@ -2465,6 +2465,11 @@ static RzCmdStatus cmd_core_handle_search_hits(RzCore *core, RzCmdStateOutput *s return RZ_CMD_STATUS_ERROR; } + if (rz_config_get_b(core->config, "search.show_progress")) { + // clear last progress notification, if any + rz_cons_clear_line(1); + } + RzListIter *it = NULL; RzSearchHit *hit = NULL; const char *cmd_hit = NULL; diff --git a/librz/search/search.c b/librz/search/search.c index 90d3b2fe3e7..b9842ae8a46 100644 --- a/librz/search/search.c +++ b/librz/search/search.c @@ -564,14 +564,17 @@ static void *search_cancel_th(void *user) { search_ctx_t *ctx = (search_ctx_t *)user; RzSearchOpt *opt = ctx->opt; - do { + while (true) { + rz_sys_usleep(RZ_SEARCH_CANCEL_CHECK_INTERVAL_USEC); + if (!rz_atomic_bool_get(ctx->loop)) { + break; + } size_t n_hits = rz_th_queue_size(ctx->hits); if (opt->cancel_cb(opt->cancel_usr, n_hits, RZ_SEARCH_CANCEL_REGULAR_CHECK)) { rz_atomic_bool_set(ctx->loop, false); break; } - rz_sys_usleep(RZ_SEARCH_CANCEL_CHECK_INTERVAL_USEC); - } while (rz_atomic_bool_get(ctx->loop)); + } return NULL; } diff --git a/test/db/cmd/cmd_search_z b/test/db/cmd/cmd_search_z index 77fe2f38ff0..53f1e9f0e9c 100644 --- a/test/db/cmd/cmd_search_z +++ b/test/db/cmd/cmd_search_z @@ -285,12 +285,13 @@ RUN NAME=String Search - ~[0] FILE=bins/cmd/search/string_encodings/Latin-Lipsum.ascii +ARGS=-1 CMDS=<