Skip to content

Commit aa5048b

Browse files
committed
feat: set names to threads
1 parent b453ce6 commit aa5048b

File tree

10 files changed

+27
-0
lines changed

10 files changed

+27
-0
lines changed

CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 3.13)
22

33
project(DATUM VERSION 0.4.1 LANGUAGES C)
44

5+
add_compile_definitions(_GNU_SOURCE)
6+
57
# Enable C23 if supported, else fall back to C11 for compatibility
68
if(CMAKE_VERSION VERSION_LESS "3.21")
79
# Older CMake: C23 not recognized; use C11
@@ -99,6 +101,11 @@ else()
99101
pkg_check_modules(EPOLL_SHIM REQUIRED epoll-shim)
100102
endif()
101103

104+
check_function_exists(pthread_setname_np HAVE_PTHREAD_SETNAME_NP)
105+
if(HAVE_PTHREAD_SETNAME_NP)
106+
add_compile_definitions(HAVE_PTHREAD_SETNAME_NP)
107+
endif()
108+
102109
cmake_pop_check_state()
103110

104111
add_custom_target(generate_git_version

src/datum_api.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1381,6 +1381,7 @@ size_t datum_api_fill_config_errors(const char *var_start, const size_t var_name
13811381
}
13821382

13831383
void *datum_restart_thread(void *ptr) {
1384+
datum_set_thread_name("restart");
13841385
// Give logger some time
13851386
usleep(500000);
13861387

@@ -1837,6 +1838,7 @@ static struct MHD_Daemon *datum_api_try_start(unsigned int flags, const int sock
18371838
}
18381839

18391840
void *datum_api_thread(void *ptr) {
1841+
datum_set_thread_name("api");
18401842
struct MHD_Daemon *daemon;
18411843

18421844
if (!datum_config.api_listen_port) {

src/datum_blocktemplates.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,7 @@ T_DATUM_TEMPLATE_DATA *datum_gbt_parser(json_t *gbt) {
348348
}
349349

350350
void *datum_gateway_fallback_notifier(void *args) {
351+
datum_set_thread_name("fallback");
351352
CURL *tcurl = NULL;
352353
char req[512];
353354
char p1[72];
@@ -393,6 +394,7 @@ void *datum_gateway_fallback_notifier(void *args) {
393394
}
394395

395396
void *datum_gateway_template_thread(void *args) {
397+
datum_set_thread_name("template");
396398
CURL *tcurl = NULL;
397399
json_t *gbt = NULL, *res_val;
398400
uint64_t i = 0;

src/datum_coinbaser.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -821,6 +821,7 @@ int datum_coinbaser_v2_parse(T_DATUM_STRATUM_JOB *s, unsigned char *coinbaser, i
821821
}
822822

823823
void *datum_coinbaser_thread(void *ptr) {
824+
datum_set_thread_name("coinbaser");
824825
int sjob = -1;
825826
T_DATUM_STRATUM_JOB *s = NULL;
826827
bool need_coinbaser = false;

src/datum_logger.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ time_t get_midnight_timestamp(void) {
250250
}
251251

252252
void * datum_logger_thread(void *ptr) {
253+
datum_set_thread_name("logger");
253254
int buffer_id,offline_buffer_id;
254255
int i,j;
255256
uint64_t sts,ets,lflush;

src/datum_protocol.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1463,6 +1463,7 @@ bool datum_protocol_is_active(void) {
14631463
}
14641464

14651465
void *datum_protocol_client(void *args) {
1466+
datum_set_thread_name("protocol");
14661467
struct addrinfo hints, *res, *p;
14671468
int sockfd = -1;
14681469
int epollfd, nfds;

src/datum_sockets.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ int get_remote_ip(int fd, char *ip, size_t max_len) {
9797

9898
void *datum_threadpool_thread(void *arg) {
9999
T_DATUM_THREAD_DATA *my = (T_DATUM_THREAD_DATA *)arg;
100+
char thread_name[16];
101+
snprintf(thread_name, sizeof(thread_name), "worker-%x", (unsigned int)my->thread_id);
102+
datum_set_thread_name(thread_name);
100103
int i, nfds, n, cidx, j;
101104
size_t leftover = 0;
102105

@@ -668,6 +671,7 @@ bool datum_sockets_setup_listening_sockets(const char * const purpose, const cha
668671
}
669672

670673
void *datum_gateway_listener_thread(void *arg) {
674+
datum_set_thread_name("listener");
671675
int i, ret;
672676
bool rejecting_now = false;
673677
uint64_t last_reject_msg_tsms = 0, curtime_tsms = 0;

src/datum_stratum.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ void datum_stratum_v1_shutdown_all(void) {
127127

128128
// Started as its own pthread during startup
129129
void *datum_stratum_v1_socket_server(void *arg) {
130+
datum_set_thread_name("stratum");
130131
// setup the stratum v1 DATUM socket server
131132
T_DATUM_SOCKET_APP *app;
132133
pthread_t pthread_datum_stratum_socket_server;

src/datum_submitblock.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ void datum_submitblock_doit(CURL *tcurl, char *url, const char *submitblock_req,
8989
}
9090

9191
void *datum_submitblock_thread(void *ptr) {
92+
datum_set_thread_name("submitblock");
9293
CURL *tcurl = NULL;
9394
int i;
9495

src/datum_utils.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,15 @@
3939
#include <stddef.h>
4040
#include <stdint.h>
4141
#include <stdbool.h>
42+
#include <pthread.h>
4243
#include "datum_logger.h"
4344

45+
#ifdef HAVE_PTHREAD_SETNAME_NP
46+
#define datum_set_thread_name(name) pthread_setname_np(pthread_self(), (name))
47+
#else
48+
#define datum_set_thread_name(name) ((void)0)
49+
#endif
50+
4451
void datum_utils_init(void);
4552

4653
extern unsigned int datum_test_failed;

0 commit comments

Comments
 (0)