diff options
author | Qi Wang <interwq@gwu.edu> | 2023-05-10 16:32:51 -0700 |
---|---|---|
committer | Qi Wang <interwq@gmail.com> | 2023-05-11 09:10:57 -0700 |
commit | d4a2b8bab10980d4677d43560f27ac9ef66cde45 (patch) | |
tree | 2dc8c5e2d0fc88c1957c3bea7769ea93c9a82b0d | |
parent | 94ace05832209543bde81d0a5f0e2a9660243abd (diff) | |
download | jemalloc-d4a2b8bab10980d4677d43560f27ac9ef66cde45.tar.gz |
Add the prof_sys_thread_name feature in the prof_recent unit test.
This tests the combination of the prof_recent and thread_name features.
Verified that it catches the issue being fixed in this PR.
Also explicitly set thread name in test/unit/prof_recent. This fixes the name
testing when no default thread name is set (e.g. FreeBSD).
-rw-r--r-- | test/include/test/thd.h | 6 | ||||
-rw-r--r-- | test/src/thd.c | 18 | ||||
-rw-r--r-- | test/unit/prof_recent.c | 14 | ||||
-rw-r--r-- | test/unit/prof_recent.sh | 2 |
4 files changed, 29 insertions, 11 deletions
diff --git a/test/include/test/thd.h b/test/include/test/thd.h index 47a51262..848c5271 100644 --- a/test/include/test/thd.h +++ b/test/include/test/thd.h @@ -5,5 +5,7 @@ typedef HANDLE thd_t; typedef pthread_t thd_t; #endif -void thd_create(thd_t *thd, void *(*proc)(void *), void *arg); -void thd_join(thd_t thd, void **ret); +void thd_create(thd_t *thd, void *(*proc)(void *), void *arg); +void thd_join(thd_t thd, void **ret); +bool thd_has_setname(void); +void thd_setname(const char *name); diff --git a/test/src/thd.c b/test/src/thd.c index 9a15eabb..8f91a595 100644 --- a/test/src/thd.c +++ b/test/src/thd.c @@ -32,3 +32,21 @@ thd_join(thd_t thd, void **ret) { pthread_join(thd, ret); } #endif + +void +thd_setname(const char *name) { +#ifdef JEMALLOC_HAVE_PTHREAD_SETNAME_NP + pthread_setname_np(pthread_self(), name); +#elif defined(JEMALLOC_HAVE_PTHREAD_SET_NAME_NP) + pthread_set_name_np(pthread_self(), name); +#endif +} + +bool +thd_has_setname(void) { +#if defined(JEMALLOC_HAVE_PTHREAD_SETNAME_NP) || defined(JEMALLOC_HAVE_PTHREAD_SET_NAME_NP) + return true; +#else + return false; +#endif +} diff --git a/test/unit/prof_recent.c b/test/unit/prof_recent.c index 4fb37236..2cf699d8 100644 --- a/test/unit/prof_recent.c +++ b/test/unit/prof_recent.c @@ -5,6 +5,8 @@ /* As specified in the shell script */ #define OPT_ALLOC_MAX 3 +const char *test_thread_name = "test_thread"; + /* Invariant before and after every test (when config_prof is on) */ static void confirm_prof_setup() { @@ -439,16 +441,11 @@ confirm_record(const char *template, const confirm_record_t *records, } ASSERT_CHAR(','); - if (opt_prof_sys_thread_name) { + if (thd_has_setname() && opt_prof_sys_thread_name) { ASSERT_FORMATTED_STR("\"%s_thread_name\"", *type); - ASSERT_CHAR(':'); - ASSERT_CHAR('"'); - while (*start != '"') { - ++start; - } - ASSERT_CHAR('"'); - ASSERT_CHAR(','); + ASSERT_FORMATTED_STR(":\"%s\",", + test_thread_name); } ASSERT_FORMATTED_STR("\"%s_time\"", *type); @@ -495,6 +492,7 @@ confirm_record(const char *template, const confirm_record_t *records, TEST_BEGIN(test_prof_recent_alloc_dump) { test_skip_if(!config_prof); + thd_setname(test_thread_name); confirm_prof_setup(); ssize_t future; diff --git a/test/unit/prof_recent.sh b/test/unit/prof_recent.sh index 58a54a47..10415bf3 100644 --- a/test/unit/prof_recent.sh +++ b/test/unit/prof_recent.sh @@ -1,5 +1,5 @@ #!/bin/sh if [ "x${enable_prof}" = "x1" ] ; then - export MALLOC_CONF="prof:true,prof_active:true,lg_prof_sample:0,prof_recent_alloc_max:3" + export MALLOC_CONF="prof:true,prof_active:true,lg_prof_sample:0,prof_recent_alloc_max:3,prof_sys_thread_name:true" fi |