Annotation of nono/lib/mythread.cpp, revision 1.1.1.2

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.