From 7a627296f0a032ea0d73989531f21096e1f295e9 Mon Sep 17 00:00:00 2001 From: Ivan Nardi <12729895+IvanNardi@users.noreply.github.com> Date: Thu, 6 Apr 2023 09:36:11 +0200 Subject: [PATCH] Fix LRU/Patricia/Automa stats in `ndpiReader` with multiple threads (#1934) --- example/ndpiReader.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/example/ndpiReader.c b/example/ndpiReader.c index 6ac9948023d..fe2add266c5 100644 --- a/example/ndpiReader.c +++ b/example/ndpiReader.c @@ -3473,16 +3473,29 @@ static void printResults(u_int64_t processing_time_usec, u_int64_t setup_time_us cumulative_stats.num_dissector_calls += ndpi_thread_info[thread_id].workflow->stats.num_dissector_calls; /* LRU caches */ - for(i = 0; i < NDPI_LRUCACHE_MAX; i++) - ndpi_get_lru_cache_stats(ndpi_thread_info[thread_id].workflow->ndpi_struct, i, &cumulative_stats.lru_stats[i]); + for(i = 0; i < NDPI_LRUCACHE_MAX; i++) { + struct ndpi_lru_cache_stats s; + ndpi_get_lru_cache_stats(ndpi_thread_info[thread_id].workflow->ndpi_struct, i, &s); + cumulative_stats.lru_stats[i].n_insert += s.n_insert; + cumulative_stats.lru_stats[i].n_search += s.n_search; + cumulative_stats.lru_stats[i].n_found += s.n_found; + } /* Automas */ - for(i = 0; i < NDPI_AUTOMA_MAX; i++) - ndpi_get_automa_stats(ndpi_thread_info[thread_id].workflow->ndpi_struct, i, &cumulative_stats.automa_stats[i]); + for(i = 0; i < NDPI_AUTOMA_MAX; i++) { + struct ndpi_automa_stats s; + ndpi_get_automa_stats(ndpi_thread_info[thread_id].workflow->ndpi_struct, i, &s); + cumulative_stats.automa_stats[i].n_search += s.n_search; + cumulative_stats.automa_stats[i].n_found += s.n_found; + } /* Patricia trees */ - for(i = 0; i < NDPI_PTREE_MAX; i++) - ndpi_get_patricia_stats(ndpi_thread_info[thread_id].workflow->ndpi_struct, i, &cumulative_stats.patricia_stats[i]); + for(i = 0; i < NDPI_PTREE_MAX; i++) { + struct ndpi_patricia_tree_stats s; + ndpi_get_patricia_stats(ndpi_thread_info[thread_id].workflow->ndpi_struct, i, &s); + cumulative_stats.patricia_stats[i].n_search += s.n_search; + cumulative_stats.patricia_stats[i].n_found += s.n_found; + } } if(cumulative_stats.total_wire_bytes == 0)