Пример #1
0
void
_glthread_SetTSD(_glthread_TSD *tsd, void *ptr)
{
   if (tsd->initMagic != INIT_MAGIC) {
      _glthread_InitTSD(tsd);
   }
   xthread_set_specific(tsd->key, ptr);
}
static void
_glitz_glx_thread_info_destroy (glitz_glx_thread_info_t *thread_info)
{
    xthread_set_specific (info_tsd, NULL);

    if (thread_info) {
	_glitz_glx_thread_info_fini (thread_info);
	free (thread_info);
    }
}
static glitz_glx_thread_info_t *
_glitz_glx_thread_info_get (const char *gl_library)
{
    glitz_glx_thread_info_t *thread_info;
    void *p;

    if (!tsd_initialized) {
	xthread_key_create (&info_tsd, _tsd_destroy);
	tsd_initialized = 1;
    }

    xthread_get_specific (info_tsd, &p);

    if (p == NULL) {
	thread_info = malloc (sizeof (glitz_glx_thread_info_t));
	_glitz_glx_thread_info_init (thread_info);

	xthread_set_specific (info_tsd, thread_info);
    } else
	thread_info = (glitz_glx_thread_info_t *) p;

    if (gl_library) {
	int len = strlen (gl_library);

	if (thread_info->gl_library) {
	    free (thread_info->gl_library);
	    thread_info->gl_library = NULL;
	}

	thread_info->gl_library = malloc (len + 1);
	if (thread_info->gl_library) {
	    memcpy (thread_info->gl_library, gl_library, len);
	    thread_info->gl_library[len] = '\0';
	}
    }

    return thread_info;
}