From 5bb723bb02a803f0315f3dd734a19e75706baf06 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Mon, 4 Mar 2024 21:07:21 +0100 Subject: fix racecondition between file and text search threads --- src/search.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'src/search.cpp') diff --git a/src/search.cpp b/src/search.cpp index 38bda76..82ffc64 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -303,17 +303,20 @@ static void *_ts_search_thread(void *args) keep_going:; while (new_result->file_list_read_cursor < new_result->files.length) { + ts_thread_sleep(10); if (new_result->cancel_search) goto finish_early; ts_mutex_lock(&new_result->files.mutex); - int read_cursor = new_result->file_list_read_cursor++; + int read_cursor = new_result->file_list_read_cursor+1; + if (read_cursor >= new_result->files.length) { + ts_mutex_unlock(&new_result->files.mutex); + continue; + } new_result->file_count++; + new_result->file_list_read_cursor++; ts_mutex_unlock(&new_result->files.mutex); - if (read_cursor >= new_result->files.length) - continue; - ts_found_file *f = *(ts_found_file **)ts_array_at(&new_result->files, read_cursor); ts_file_content content = ts_platform_read_file(f->path, "rb, ccs=UTF-8"); @@ -366,7 +369,7 @@ static void _ts_list_files(ts_search_result* result) ts_thread_detach(&thr); } -void ts_start_search(utf8_int8_t *path, utf8_int8_t *filter, utf8_int8_t *query) +void ts_start_search(utf8_int8_t *path, utf8_int8_t *filter, utf8_int8_t *query, int thread_count, int max_file_size) { if (utf8len(query) > 0 && utf8len(query) <= 2) { // need a string of atleast 3 characters return; @@ -381,6 +384,8 @@ void ts_start_search(utf8_int8_t *path, utf8_int8_t *filter, utf8_int8_t *query) snprintf(new_result->directory_to_search, MAX_INPUT_LENGTH, "%s", path); snprintf(new_result->search_text, MAX_INPUT_LENGTH, "%s", query); new_result->filters = ts_get_filters(filter); + new_result->max_ts_thread_count = thread_count; + new_result->max_file_size = max_file_size; if (utf8len(query) == 0) { new_result->search_text = nullptr; -- cgit v1.2.3-70-g09d2