1//========================================================================
2// GLFW 3.2 POSIX - www.glfw.org
3//------------------------------------------------------------------------
4// Copyright (c) 2002-2006 Marcus Geelnard
5// Copyright (c) 2006-2016 Camilla Berglund <elmindreda@glfw.org>
6//
7// This software is provided 'as-is', without any express or implied
8// warranty. In no event will the authors be held liable for any damages
9// arising from the use of this software.
10//
11// Permission is granted to anyone to use this software for any purpose,
12// including commercial applications, and to alter it and redistribute it
13// freely, subject to the following restrictions:
14//
15// 1. The origin of this software must not be misrepresented; you must not
16// claim that you wrote the original software. If you use this software
17// in a product, an acknowledgment in the product documentation would
18// be appreciated but is not required.
19//
20// 2. Altered source versions must be plainly marked as such, and must not
21// be misrepresented as being the original software.
22//
23// 3. This notice may not be removed or altered from any source
24// distribution.
25//
26//========================================================================
27
28#include "internal.h"
29
30
31//////////////////////////////////////////////////////////////////////////
32////// GLFW internal API //////
33//////////////////////////////////////////////////////////////////////////
34
35GLFWbool _glfwInitThreadLocalStoragePOSIX(void)
36{
37 if (pthread_key_create(&_glfw.posix_tls.context, NULL) != 0)
38 {
39 _glfwInputError(GLFW_PLATFORM_ERROR,
40 "POSIX: Failed to create context TLS");
41 return GLFW_FALSE;
42 }
43
44 _glfw.posix_tls.allocated = GLFW_TRUE;
45 return GLFW_TRUE;
46}
47
48void _glfwTerminateThreadLocalStoragePOSIX(void)
49{
50 if (_glfw.posix_tls.allocated)
51 pthread_key_delete(_glfw.posix_tls.context);
52}
53
54
55//////////////////////////////////////////////////////////////////////////
56////// GLFW platform API //////
57//////////////////////////////////////////////////////////////////////////
58
59void _glfwPlatformSetCurrentContext(_GLFWwindow* context)
60{
61 pthread_setspecific(_glfw.posix_tls.context, context);
62}
63
64_GLFWwindow* _glfwPlatformGetCurrentContext(void)
65{
66 return pthread_getspecific(_glfw.posix_tls.context);
67}
68
69