summaryrefslogtreecommitdiff
path: root/src/Local.cc
diff options
context:
space:
mode:
authorNicolas "Pixel" Noble <pixel@nobis-crew.org>2012-08-31 16:13:04 -0700
committerNicolas "Pixel" Noble <pixel@nobis-crew.org>2012-08-31 16:13:04 -0700
commitd2db92f6b5d275b3150deb7a52a8da142a7cc953 (patch)
treedc321491b6a9b54d6e8b6477fddf384f2e5ce7ec /src/Local.cc
parent7866096c62f265960d48a61ceb1ad8d53e44400a (diff)
Simplifying TLS code a bit (removing createTLS...) and making the PthreadsTLSManager its own global class.
Diffstat (limited to 'src/Local.cc')
-rw-r--r--src/Local.cc28
1 files changed, 12 insertions, 16 deletions
diff --git a/src/Local.cc b/src/Local.cc
index 9729c35..a9eccdd 100644
--- a/src/Local.cc
+++ b/src/Local.cc
@@ -13,10 +13,6 @@ void * Balau::TLSManager::setTLS(void * val) {
return r;
}
-void * Balau::TLSManager::createTLS() {
- return Local::create();
-}
-
static Balau::TLSManager dummyTLSManager;
Balau::TLSManager * Balau::g_tlsManager = &dummyTLSManager;
@@ -29,31 +25,31 @@ void Balau::Local::doStart() {
m_globals[m_idx] = 0;
}
-class PThreadsTLSManager : public Balau::TLSManager, public Balau::AtStart {
+class GlobalPThreadsTLSManager : public Balau::PThreadsTLSManager, public Balau::AtStart {
public:
- PThreadsTLSManager() : AtStart(0) { }
- virtual void * getTLS();
- virtual void * setTLS(void * val);
- virtual void doStart();
- private:
- pthread_key_t m_key;
+ GlobalPThreadsTLSManager() : AtStart(0) { }
+ void doStart();
};
-PThreadsTLSManager pthreadsTLSManager;
+GlobalPThreadsTLSManager pthreadsTLSManager;
+
+void GlobalPThreadsTLSManager::doStart() {
+ init();
+ Balau::g_tlsManager = this;
+}
-void PThreadsTLSManager::doStart() {
+void Balau::PThreadsTLSManager::init() {
int r;
r = pthread_key_create(&m_key, NULL);
RAssert(r == 0, "Unable to create a pthtread_key: %i", r);
- Balau::g_tlsManager = this;
}
-void * PThreadsTLSManager::getTLS() {
+void * Balau::PThreadsTLSManager::getTLS() {
return pthread_getspecific(m_key);
}
-void * PThreadsTLSManager::setTLS(void * val) {
+void * Balau::PThreadsTLSManager::setTLS(void * val) {
void * r = pthread_getspecific(m_key);
pthread_setspecific(m_key, val);
return r;