Add an erase() method to llvm::ThreadLocal.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109686 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Owen Anderson 2010-07-28 22:49:43 +00:00
parent e850e6e162
commit 826c148aa5
4 changed files with 13 additions and 0 deletions

View File

@ -28,6 +28,7 @@ namespace llvm {
virtual ~ThreadLocalImpl();
void setInstance(const void* d);
const void* getInstance();
void removeInstance();
};
/// ThreadLocal - A class used to abstract thread-local storage. It holds,
@ -43,6 +44,9 @@ namespace llvm {
// set - Associates a pointer to an object with the current thread.
void set(T* d) { setInstance(d); }
// erase - Removes the pointer associated with the current thread.
void erase() { removeInstance(); }
};
}
}

View File

@ -67,6 +67,10 @@ const void* ThreadLocalImpl::getInstance() {
return pthread_getspecific(*key);
}
void ThreadLocalImpl::removeInstance() {
setInstance(0);
}
}
#elif defined(LLVM_ON_UNIX)

View File

@ -22,4 +22,5 @@ ThreadLocalImpl::ThreadLocalImpl() { }
ThreadLocalImpl::~ThreadLocalImpl() { }
void ThreadLocalImpl::setInstance(const void* d) { data = const_cast<void*>(d);}
const void* ThreadLocalImpl::getInstance() { return data; }
void ThreadLocalImpl::removeInstance() { setInstance(0); }
}

View File

@ -46,4 +46,8 @@ void ThreadLocalImpl::setInstance(const void* d){
assert(errorcode != 0);
}
void ThreadLocalImpl::removeInstance() {
setInstance(0);
}
}