// Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "flutter/fml/thread_local.h" #if FML_THREAD_LOCAL_PTHREADS #include "flutter/fml/logging.h" namespace fml { namespace internal { ThreadLocalPointer::ThreadLocalPointer(void (*destroy)(void*)) { FML_CHECK(pthread_key_create(&key_, destroy) == 0); } ThreadLocalPointer::~ThreadLocalPointer() { FML_CHECK(pthread_key_delete(key_) == 0); } void* ThreadLocalPointer::get() const { return pthread_getspecific(key_); } void* ThreadLocalPointer::swap(void* ptr) { void* old_ptr = get(); FML_CHECK(pthread_setspecific(key_, ptr) == 0); return old_ptr; } } // namespace internal } // namespace fml #endif // FML_THREAD_LOCAL_PTHREADS