| 2060 | } |
| 2061 | |
| 2062 | T* GetOrCreateValue() const { |
| 2063 | ThreadLocalValueHolderBase* const holder = |
| 2064 | static_cast<ThreadLocalValueHolderBase*>(pthread_getspecific(key_)); |
| 2065 | if (holder != nullptr) { |
| 2066 | return CheckedDowncastToActualType<ValueHolder>(holder)->pointer(); |
| 2067 | } |
| 2068 | |
| 2069 | ValueHolder* const new_holder = default_factory_->MakeNewHolder(); |
| 2070 | ThreadLocalValueHolderBase* const holder_base = new_holder; |
| 2071 | GTEST_CHECK_POSIX_SUCCESS_(pthread_setspecific(key_, holder_base)); |
| 2072 | return new_holder->pointer(); |
| 2073 | } |
| 2074 | |
| 2075 | class ValueHolderFactory { |
| 2076 | public: |
no test coverage detected