Browse Source

setting the name of the threads for linux,freebsd,openbsd and osx
code is borrowed from bitcoins util.c, so it is already tested

Denis Ahrens 13 years ago
parent
commit
271b05ab04
2 changed files with 38 additions and 0 deletions
  1. 22 0
      cgminer.c
  2. 16 0
      util.c

+ 22 - 0
cgminer.c

@@ -3036,6 +3036,8 @@ static void *get_work_thread(void *userdata)
 
 	pthread_detach(pthread_self());
 
+	RenameThread("get_work");
+
 	applog(LOG_DEBUG, "Creating extra get work thread");
 
 retry:
@@ -3219,6 +3221,8 @@ static void *submit_work_thread(void *userdata)
 
 	pthread_detach(pthread_self());
 
+	RenameThread("submit_work");
+
 	applog(LOG_DEBUG, "Creating extra submit work thread");
 
 	check_solve(work);
@@ -3662,6 +3666,8 @@ static void *stage_thread(void *userdata)
 
 	pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
 
+	RenameThread("stage");
+
 	while (ok) {
 		struct work *work = NULL;
 
@@ -4341,6 +4347,8 @@ static void *input_thread(void __maybe_unused *userdata)
 {
 	pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
 
+	RenameThread("input");
+
 	if (!curses_active)
 		return NULL;
 
@@ -4377,6 +4385,8 @@ static void *workio_thread(void *userdata)
 
 	pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
 
+	RenameThread("work_io");
+
 	while (ok) {
 		struct workio_cmd *wc;
 
@@ -4416,6 +4426,8 @@ static void *api_thread(void *userdata)
 	pthread_detach(pthread_self());
 	pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
 
+	RenameThread("api");
+
 	api(api_thr_id);
 
 	PTH(mythr) = 0L;
@@ -4662,6 +4674,8 @@ static void *stratum_thread(void *userdata)
 
 	pthread_detach(pthread_self());
 
+	RenameThread("stratum");
+
 	while (42) {
 		struct timeval timeout;
 		fd_set rd;
@@ -5495,6 +5509,8 @@ void *miner_thread(void *userdata)
 
 	pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
 
+	RenameThread("miner");
+
 	gettimeofday(&getwork_start, NULL);
 
 	if (api->thread_init && !api->thread_init(mythr)) {
@@ -5750,6 +5766,8 @@ static void *longpoll_thread(void *userdata)
 	char *lp_url;
 	int rolltime;
 
+	RenameThread("longpoll");
+
 	curl = curl_easy_init();
 	if (unlikely(!curl)) {
 		applog(LOG_ERR, "CURL initialisation failed");
@@ -5941,6 +5959,8 @@ static void *watchpool_thread(void __maybe_unused *userdata)
 
 	pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
 
+	RenameThread("watchpool");
+
 	while (42) {
 		struct timeval now;
 		int i;
@@ -6012,6 +6032,8 @@ static void *watchdog_thread(void __maybe_unused *userdata)
 
 	pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
 
+	RenameThread("watchdog");
+
 	memset(&zero_tv, 0, sizeof(struct timeval));
 	gettimeofday(&rotate_tv, NULL);
 

+ 16 - 0
util.c

@@ -1496,3 +1496,19 @@ void *realloc_strcat(char *ptr, char *s)
 	free(ptr);
 	return ret;
 }
+
+void RenameThread(const char* name)
+{
+#if defined(PR_SET_NAME)
+	// Only the first 15 characters are used (16 - NUL terminator)
+	prctl(PR_SET_NAME, name, 0, 0, 0);
+#elif (defined(__FreeBSD__) || defined(__OpenBSD__))
+	pthread_set_name_np(pthread_self(), name);
+#elif defined(MAC_OSX)
+	pthread_setname_np(name);
+#else
+	// Prevent warnings for unused parameters...
+	(void)name;
+#endif
+}
+