|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
5: //
6:
7: // pthread の OS ごとに違う部分を吸収する
8:
9: #include "mythread.h"
10: #include <pthread.h>
11: #if defined(HAVE_PTHREAD_NP_H)
12: #include <pthread_np.h>
13: #endif
14:
15: // pthread_set{,_}name_np() のプロトタイプは OS によってみんなフリーダムなので
16: // (というか _np は Non Portable か Non Posix のことらしい?)、
17: // ここで吸収する。
18: //
19: // MacOSX は void pthread_setname_np(name)
20: // Linux は int pthread_setname_np(threadID, name)
21: // NetBSD は int pthread_setname_np(threadID, name, arg)
22: // OpenBSD は void pthread_set_name_np(threadID, name)
23: // FreeBSD は void pthread_set_name_np(threadID, name)
24: // (2020/06 以降は pthread_setname_np(threadID, name) も追加)
25: void
26: PTHREAD_SETNAME(const char *name)
27: {
1.1.1.2 ! root 28: #if defined(__linux__)
! 29: // Linux (Ubuntu 20.04) の top はスレッド名があればそれだけ表示するらしい。
! 30: // スレッド名 "Main" がプロセス名なしに表示されても何のことか分からないので
! 31: // プロセス名を入れておきたい。
! 32: // 一方 NetBSD の top ではプロセス名とスレッド名は欄が別なので(そして狭い)
! 33: // ここにプロセス名は入れたくない。ので、Linux の時だけに分離する。
! 34: // 他の OS はしらん。
! 35: char buf[32];
! 36:
! 37: snprintf(buf, sizeof(buf), "nono:%s", name);
! 38: name = buf;
! 39: #endif
! 40:
1.1 root 41: #if defined(HAVE_PTHREAD_SETNAME_NP_name)
42: pthread_setname_np(name);
43:
44: #elif defined(HAVE_PTHREAD_SETNAME_NP_th_name)
45: pthread_setname_np(pthread_self(), name);
46:
47: #elif defined(HAVE_PTHREAD_SETNAME_NP_th_name_arg)
48: pthread_setname_np(pthread_self(), name, NULL);
49:
50: #elif defined(HAVE_PTHREAD_SET_NAME_NP_th_name)
51: pthread_set_name_np(pthread_self(), name);
52:
53: #else
54: // デバッガとかでスレッドに名前がついてると嬉しいという程度なので、
55: // なければ気にしない。
56: #endif
57: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.