Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 12 Aug 2018 22:33:06 +0200
From:      Willem Jan Withagen <wjw@digiware.nl>
To:        FreeBSD Hackers <freebsd-hackers@freebsd.org>
Subject:   Write a version for pthread_get_name_np
Message-ID:  <42689feb-9bd4-429b-63d7-b9193123ee47@digiware.nl>
In-Reply-To: <7fa2b876-9397-da2b-cb29-56badf11b66d@ecoracks.nl>
References:  <7fa2b876-9397-da2b-cb29-56badf11b66d@ecoracks.nl>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi,

For some porting I'm trying to write a pthread_get_name_np(), but
I have run into a snag....
Tried some the the procstat code I would come up with:

int pthread_get_name_np(pthread_t *thread,
                         char *name, size_t len){
     struct procstat *procstat;
     int pid = getpid();
     unsigned int count, i;
     struct kinfo_proc *kip, *kipp;

     procstat = procstat_open_sysctl();
     kip = procstat_getprocs(procstat, KERN_PROC_PID | KERN_PROC_INC_THREAD,
             pid, &count);
     for (i = 0; i < count; i++) {
         kipp = &kip[i];
         printf("thread: %ld(0x%lx), %ld(0x%lx)\n", thread, thread,
kipp->ki_tid, kipp->ki_tid);
         if (thread == kipp->ki_tid) {
             kinfo_proc_thread_name(kipp, name, len);
         }
     }
     return 0;
}

Problem only is that the TID value in what procstat_getprocs returns in
ki_tid is nowhere near
what pthread_self() returns.
But both manual page and the include file describe the value as Thread ID.
Only in sys/user.h the type is
     lwpid_t ki_tid;                 /* XXXKSE thread id */

What do I need to translate one tid into the other so I can really
compare them?

Thanx,
--WjW




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?42689feb-9bd4-429b-63d7-b9193123ee47>