libzypp  17.37.5
threaddata.cc
Go to the documentation of this file.
1 #include "private/threaddata_p.h"
4 #include <ostream> //for std::endl
5 #include <sstream>
6 #include <pthread.h>
7 
8 namespace zyppng
9 {
11  : _threadId( std::this_thread::get_id() ),
12  _nativeHandle( pthread_self() )
13  {
14  }
15 
17  {
18  static thread_local ThreadData data;
19  return data;
20  }
21 
22  const std::string &ThreadData::name() const
23  {
24  if ( _threadName.empty() ) {
25  std::stringstream strStr;
26  strStr << _threadId;
27  _threadName = strStr.str();
28  }
29  return _threadName;
30  }
31 
32  std::shared_ptr<EventDispatcher> ThreadData::ensureDispatcher()
33  {
34  auto sp = _dispatcher.lock();
35  if (!sp) {
36  MIL << "Creating the Event Dispatcher for thread: " << name() << "("<<_threadId<<")" << std::endl;
38  }
39  return sp;
40  }
41 
42  void ThreadData::setDispatcher( const std::shared_ptr<EventDispatcher> &disp )
43  {
44  if ( _dispatcher.lock() ) {
45  WAR << "Dispatcher was already created for the current thread" << std::endl;
46  return;
47  }
48  _dispatcher = disp;
49  }
50 
52  {
53  // length is restricted to 16 characters, including the terminating null byte ('\0')
54  pthread_setname_np( _nativeHandle, name().substr(0,15).c_str() );
55  }
56 
57  std::shared_ptr<EventDispatcher> ThreadData::dispatcher() {
58  auto sp = _dispatcher.lock();
59  if (!sp) {
60  MIL << "Requested Event Dispatcher for thread: " << name() << "("<<_threadId<<") but none was created." << std::endl;
61  }
62  return sp;
63  }
64 } // namespace zyppng
#define MIL
Definition: Logger.h:100
std::thread::id _threadId
Definition: threaddata_p.h:35
static std::shared_ptr< EventDispatcher > create()
std::string _threadName
lazy initialized to _threadId if unset
Definition: threaddata_p.h:36
const std::string & name() const
Definition: threaddata.cc:22
Definition: Arch.h:363
std::shared_ptr< EventDispatcher > dispatcher()
Definition: threaddata.cc:57
std::thread::native_handle_type _nativeHandle
Definition: threaddata_p.h:37
#define WAR
Definition: Logger.h:101
std::weak_ptr< EventDispatcher > _dispatcher
Definition: threaddata_p.h:38
static ZYPP_API ThreadData & current()
Definition: threaddata.cc:16
std::shared_ptr< EventDispatcher > ensureDispatcher()
Definition: threaddata.cc:32
void setDispatcher(const std::shared_ptr< EventDispatcher > &disp)
Definition: threaddata.cc:42