diff --git a/ci-scripts/docker/Dockerfile.unittest.ubuntu22 b/ci-scripts/docker/Dockerfile.unittest.ubuntu22 index 6098a1d1f6b59b46ac69fa415d2bb127ba035a5c..21805560d4bd369a90273d6443bbb31d0c7d34db 100644 --- a/ci-scripts/docker/Dockerfile.unittest.ubuntu22 +++ b/ci-scripts/docker/Dockerfile.unittest.ubuntu22 @@ -37,4 +37,4 @@ WORKDIR /oai-ran COPY . . WORKDIR /oai-ran/build -RUN cmake -GNinja -DENABLE_TESTS=ON -DCMAKE_BUILD_TYPE=Debug .. && ninja tests +RUN cmake -GNinja -DENABLE_TESTS=ON -DCMAKE_BUILD_TYPE=Debug -DSANITIZE_ADDRESS=True .. && ninja tests diff --git a/common/utils/threadPool/test/test_thread-pool.c b/common/utils/threadPool/test/test_thread-pool.c index 0d6defd5cbae3edb4622cf2c73329df82a67bb3f..1af3dc10204fcc222b9942f2b9b5310d8062fcca 100644 --- a/common/utils/threadPool/test/test_thread-pool.c +++ b/common/utils/threadPool/test/test_thread-pool.c @@ -46,7 +46,7 @@ void displayList(notifiedFIFO_t *nf) struct testData { int id; int sleepTime; - char txt[30]; + char txt[50]; }; void processing(void *arg) @@ -64,21 +64,27 @@ int main() logInit(); notifiedFIFO_t myFifo; initNotifiedFIFO(&myFifo); + int num_elements_on_queue = 0; pushNotifiedFIFO(&myFifo, newNotifiedFIFO_elt(sizeof(struct testData), 1234, NULL, NULL)); + num_elements_on_queue++; for (int i = 10; i > 1; i--) { pushNotifiedFIFO(&myFifo, newNotifiedFIFO_elt(sizeof(struct testData), 1000 + i, NULL, NULL)); + num_elements_on_queue++; } displayList(&myFifo); notifiedFIFO_elt_t *tmp = pullNotifiedFIFO(&myFifo); printf("pulled: %lu\n", tmp->key); displayList(&myFifo); + delNotifiedFIFO_elt(tmp); tmp = pullNotifiedFIFO(&myFifo); + num_elements_on_queue--; printf("pulled: %lu\n", tmp->key); displayList(&myFifo); pushNotifiedFIFO(&myFifo, newNotifiedFIFO_elt(sizeof(struct testData), 12345678, NULL, NULL)); displayList(&myFifo); + delNotifiedFIFO_elt(tmp); do { tmp = pollNotifiedFIFO(&myFifo); @@ -86,9 +92,12 @@ int main() if (tmp) { printf("pulled: %lu\n", tmp->key); displayList(&myFifo); + delNotifiedFIFO_elt(tmp); + num_elements_on_queue--; } else printf("Empty list \n"); - } while (tmp); + } while (num_elements_on_queue > 0); + AssertFatal(pollNotifiedFIFO(&myFifo) == NULL, "Unexpected extra element on queue\n"); tpool_t pool; char params[] = "1,2,3,4,5"; @@ -129,5 +138,6 @@ int main() dur / 1000, cumulProcessTime / 1000, (dur - cumulProcessTime) / (1000 * nb_jobs)); + abortTpool(&pool); return 0; } diff --git a/common/utils/threadPool/thread-pool.h b/common/utils/threadPool/thread-pool.h index 1a78e201347e41de88ff8384f4cbef5817d71f57..b0e1b9e4e88e68e2c46b0c9cfc3bebbf4591193b 100644 --- a/common/utils/threadPool/thread-pool.h +++ b/common/utils/threadPool/thread-pool.h @@ -336,7 +336,9 @@ static inline int abortTpool(tpool_t *t) { thread = t->allthreads; while (thread != NULL) { pthread_cancel(thread->threadID); - thread = thread->next; + struct one_thread *next = thread->next; + free(thread); + thread = next; } return nbRemoved; diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_entity.c b/openair2/LAYER2/nr_rlc/nr_rlc_entity.c index 0e07e14fc98cf09259d94fb6b2da092fc8707c31..a4207716f55fc19d275ed7cbe2f3f90f3179d90e 100644 --- a/openair2/LAYER2/nr_rlc/nr_rlc_entity.c +++ b/openair2/LAYER2/nr_rlc/nr_rlc_entity.c @@ -110,11 +110,8 @@ nr_rlc_entity_t *new_nr_rlc_entity_am( ret->max_retx_threshold = max_retx_threshold; ret->sn_field_length = sn_field_length; - if (!(sn_field_length == 12 || sn_field_length == 18)) { - LOG_E(RLC, "%s:%d:%s: wrong SN field_lenght (%d), must be 12 or 18\n", - __FILE__, __LINE__, __FUNCTION__, sn_field_length); - exit(1); - } + AssertFatal(sn_field_length == 12 || sn_field_length == 18, "Wrong SN field_length (%d), must be 12 or 18\n", sn_field_length); + ret->sn_modulus = 1 << ret->sn_field_length; ret->window_size = ret->sn_modulus / 2; @@ -172,11 +169,8 @@ nr_rlc_entity_t *new_nr_rlc_entity_um( ret->t_reassembly = t_reassembly; ret->sn_field_length = sn_field_length; - if (!(sn_field_length == 6 || sn_field_length == 12)) { - LOG_E(RLC, "%s:%d:%s: wrong SN field_lenght (%d), must be 6 or 12\n", - __FILE__, __LINE__, __FUNCTION__, sn_field_length); - exit(1); - } + AssertFatal(sn_field_length == 6 || sn_field_length == 12, "Wrong SN field_length (%d), must be 6 or 12\n", sn_field_length); + ret->sn_modulus = 1 << ret->sn_field_length; ret->window_size = ret->sn_modulus / 2;