summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQi Wang <interwq@gwu.edu>2023-05-10 16:32:51 -0700
committerQi Wang <interwq@gmail.com>2023-05-11 09:10:57 -0700
commitd4a2b8bab10980d4677d43560f27ac9ef66cde45 (patch)
tree2dc8c5e2d0fc88c1957c3bea7769ea93c9a82b0d
parent94ace05832209543bde81d0a5f0e2a9660243abd (diff)
downloadjemalloc-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.h6
-rw-r--r--test/src/thd.c18
-rw-r--r--test/unit/prof_recent.c14
-rw-r--r--test/unit/prof_recent.sh2
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