xref: /llvm-project/libc/src/pthread/pthread_join.cpp (revision 5ff3ff33ff930e4ec49da7910612d8a41eb068cb)
18dc42802SSiva Chandra Reddy //===-- Implementation of the pthread_join function -----------------------===//
270c8d12bSSiva Chandra Reddy //
370c8d12bSSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
470c8d12bSSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information.
570c8d12bSSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
670c8d12bSSiva Chandra Reddy //
770c8d12bSSiva Chandra Reddy //===----------------------------------------------------------------------===//
870c8d12bSSiva Chandra Reddy 
970c8d12bSSiva Chandra Reddy #include "pthread_join.h"
1070c8d12bSSiva Chandra Reddy 
1170c8d12bSSiva Chandra Reddy #include "src/__support/common.h"
12*5ff3ff33SPetr Hosek #include "src/__support/macros/config.h"
1370c8d12bSSiva Chandra Reddy #include "src/__support/threads/thread.h"
1470c8d12bSSiva Chandra Reddy 
1570c8d12bSSiva Chandra Reddy #include <pthread.h> // For pthread_* type definitions.
1670c8d12bSSiva Chandra Reddy 
17*5ff3ff33SPetr Hosek namespace LIBC_NAMESPACE_DECL {
1870c8d12bSSiva Chandra Reddy 
19b6bc9d72SGuillaume Chatelet static_assert(sizeof(pthread_t) == sizeof(LIBC_NAMESPACE::Thread),
20f4580c6dSSiva Chandra Reddy               "Mismatch between pthread_t and internal Thread.");
2170c8d12bSSiva Chandra Reddy 
2270c8d12bSSiva Chandra Reddy LLVM_LIBC_FUNCTION(int, pthread_join, (pthread_t th, void **retval)) {
23f4580c6dSSiva Chandra Reddy   auto *thread = reinterpret_cast<Thread *>(&th);
2470c8d12bSSiva Chandra Reddy   int result = thread->join(retval);
2570c8d12bSSiva Chandra Reddy   return result;
2670c8d12bSSiva Chandra Reddy }
2770c8d12bSSiva Chandra Reddy 
28*5ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL
29