Fix deletion of uninitialized POSIX TLS key

Zero (the initial value of context) is a valid TLS key, so doing this
can delete someone else's key.

Fixes #627.
This commit is contained in:
Roman Donchenko 2015-10-28 15:22:33 +03:00 committed by Camilla Berglund
parent 43f4afef78
commit cdf08c1ff3
2 changed files with 4 additions and 1 deletions

View File

@ -41,12 +41,14 @@ int _glfwCreateContextTLS(void)
return GLFW_FALSE; return GLFW_FALSE;
} }
_glfw.posix_tls.allocated = GLFW_TRUE;
return GLFW_TRUE; return GLFW_TRUE;
} }
void _glfwDestroyContextTLS(void) void _glfwDestroyContextTLS(void)
{ {
pthread_key_delete(_glfw.posix_tls.context); if (_glfw.posix_tls.allocated)
pthread_key_delete(_glfw.posix_tls.context);
} }
void _glfwSetContextTLS(_GLFWwindow* context) void _glfwSetContextTLS(_GLFWwindow* context)

View File

@ -37,6 +37,7 @@
// //
typedef struct _GLFWtlsPOSIX typedef struct _GLFWtlsPOSIX
{ {
GLFWbool allocated;
pthread_key_t context; pthread_key_t context;
} _GLFWtlsPOSIX; } _GLFWtlsPOSIX;