mirror of
https://github.com/Zygo/bees.git
synced 2025-05-17 21:35:45 +02:00
BeesNote: if thread name was not set, get it from Task or pthread_getname_np
Threads from the Task module in libcrucible don't set BeesNote::tl_name. Even if they did, in Task context the thread name is unspecific to the point of meaninglessness. Use the Task::print method as the name for such threads, and be sure that future Task print functions are designed for that usage. The extra complexity in BeesNote::get_name() seems preferable to bombarding pthread_setname_np hundreds or thousands of times per second. FIXME: we are now calling Task::print() on every BeesNote, which is effectively unconditionally. Maybe we should have Task::print() and get_name() return a closure, or just evaluate Task::print() once and cache it in TaskState, or define Task's constructor with a string argument instead of the current print_fn closure. Signed-off-by: Zygo Blaxell <bees@furryterror.org>
This commit is contained in:
parent
3f60a0efde
commit
fef7aed8fa
14
src/bees.cc
14
src/bees.cc
@ -120,7 +120,7 @@ BeesNote::~BeesNote()
|
|||||||
BeesNote::BeesNote(function<void(ostream &os)> f) :
|
BeesNote::BeesNote(function<void(ostream &os)> f) :
|
||||||
m_func(f)
|
m_func(f)
|
||||||
{
|
{
|
||||||
m_name = tl_name;
|
m_name = get_name();
|
||||||
m_prev = tl_next;
|
m_prev = tl_next;
|
||||||
tl_next = this;
|
tl_next = this;
|
||||||
unique_lock<mutex> lock(s_mutex);
|
unique_lock<mutex> lock(s_mutex);
|
||||||
@ -137,10 +137,16 @@ string
|
|||||||
BeesNote::get_name()
|
BeesNote::get_name()
|
||||||
{
|
{
|
||||||
if (tl_name.empty()) {
|
if (tl_name.empty()) {
|
||||||
return "bees";
|
char buf[100];
|
||||||
} else {
|
memset(buf, '\0', sizeof(buf));
|
||||||
return tl_name;
|
pthread_getname_np(pthread_self(), buf, sizeof(buf));
|
||||||
|
buf[sizeof(buf) - 1] = '\0';
|
||||||
|
tl_name = buf;
|
||||||
|
if (tl_name.empty()) {
|
||||||
|
tl_name = "bees";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return tl_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
BeesNote::ThreadStatusMap
|
BeesNote::ThreadStatusMap
|
||||||
|
Loading…
x
Reference in New Issue
Block a user