Line data Source code
1 : /* SPDX-License-Identifier: LGPL-2.1+ */ 2 : 3 : #include <pthread.h> 4 : 5 : #include "process-util.h" 6 : #include "set.h" 7 : #include "tests.h" 8 : 9 : #define NUM 100 10 : 11 2 : static void* thread(void *p) { 12 2 : Set **s = p; 13 : 14 2 : assert_se(s); 15 2 : assert_se(*s); 16 : 17 2 : assert_se(!is_main_thread()); 18 2 : assert_se(set_size(*s) == NUM); 19 2 : *s = set_free(*s); 20 : 21 2 : return NULL; 22 : } 23 : 24 2 : static void test_one(const char *val) { 25 : pthread_t t; 26 2 : int x[NUM] = {}; 27 : unsigned i; 28 : Set *s; 29 : 30 2 : log_info("Testing with SYSTEMD_MEMPOOL=%s", val); 31 2 : assert_se(setenv("SYSTEMD_MEMPOOL", val, true) == 0); 32 2 : assert_se(is_main_thread()); 33 : 34 2 : assert_se(s = set_new(NULL)); 35 202 : for (i = 0; i < NUM; i++) 36 200 : assert_se(set_put(s, &x[i])); 37 : 38 2 : assert_se(pthread_create(&t, NULL, thread, &s) == 0); 39 2 : assert_se(pthread_join(t, NULL) == 0); 40 : 41 2 : assert_se(!s); 42 2 : } 43 : 44 1 : int main(int argc, char *argv[]) { 45 1 : test_setup_logging(LOG_DEBUG); 46 : 47 1 : test_one("0"); 48 : /* The value $SYSTEMD_MEMPOOL= is cached. So the following 49 : * test should also succeed. */ 50 1 : test_one("1"); 51 : 52 1 : return 0; 53 : }