SDL  2.0
SDL_systls.c File Reference
#include "../../SDL_internal.h"
#include "SDL_thread.h"
#include "../SDL_systhread.h"
#include "../SDL_thread_c.h"
#include <pthread.h>
+ Include dependency graph for SDL_systls.c:

Go to the source code of this file.

Macros

#define INVALID_PTHREAD_KEY   ((pthread_key_t)-1)
 

Functions

SDL_TLSDataSDL_SYS_GetTLSData (void)
 
int SDL_SYS_SetTLSData (SDL_TLSData *data)
 

Variables

static pthread_key_t thread_local_storage = INVALID_PTHREAD_KEY
 
static SDL_bool generic_local_storage = SDL_FALSE
 

Macro Definition Documentation

◆ INVALID_PTHREAD_KEY

#define INVALID_PTHREAD_KEY   ((pthread_key_t)-1)

Definition at line 29 of file SDL_systls.c.

Function Documentation

◆ SDL_SYS_GetTLSData()

SDL_TLSData* SDL_SYS_GetTLSData ( void  )

Definition at line 35 of file SDL_systls.c.

36 {
38  static SDL_SpinLock lock;
41  pthread_key_t storage;
42  if (pthread_key_create(&storage, NULL) == 0) {
44  thread_local_storage = storage;
45  } else {
47  }
48  }
50  }
52  return SDL_Generic_GetTLSData();
53  }
55  return (SDL_TLSData *)pthread_getspecific(thread_local_storage);
56 }

References generic_local_storage, INVALID_PTHREAD_KEY, lock, NULL, SDL_AtomicLock, SDL_AtomicUnlock, SDL_Generic_GetTLSData(), SDL_MemoryBarrierAcquire, SDL_MemoryBarrierRelease, SDL_TRUE, and thread_local_storage.

◆ SDL_SYS_SetTLSData()

int SDL_SYS_SetTLSData ( SDL_TLSData data)

Definition at line 59 of file SDL_systls.c.

60 {
63  }
64  if (pthread_setspecific(thread_local_storage, data) != 0) {
65  return SDL_SetError("pthread_setspecific() failed");
66  }
67  return 0;
68 }

References generic_local_storage, SDL_Generic_SetTLSData(), SDL_SetError, and thread_local_storage.

Variable Documentation

◆ generic_local_storage

SDL_bool generic_local_storage = SDL_FALSE
static

Definition at line 32 of file SDL_systls.c.

Referenced by SDL_SYS_GetTLSData(), and SDL_SYS_SetTLSData().

◆ thread_local_storage

pthread_key_t thread_local_storage = INVALID_PTHREAD_KEY
static

Definition at line 31 of file SDL_systls.c.

Referenced by SDL_SYS_GetTLSData(), and SDL_SYS_SetTLSData().

INVALID_PTHREAD_KEY
#define INVALID_PTHREAD_KEY
Definition: SDL_systls.c:29
SDL_TLSData
Definition: SDL_thread_c.h:70
SDL_Generic_SetTLSData
int SDL_Generic_SetTLSData(SDL_TLSData *storage)
Definition: SDL_thread.c:163
NULL
#define NULL
Definition: begin_code.h:167
SDL_MemoryBarrierRelease
#define SDL_MemoryBarrierRelease()
Definition: SDL_atomic.h:207
SDL_AtomicLock
#define SDL_AtomicLock
Definition: SDL_dynapi_overrides.h:64
thread_local_storage
static pthread_key_t thread_local_storage
Definition: SDL_systls.c:31
generic_local_storage
static SDL_bool generic_local_storage
Definition: SDL_systls.c:32
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1974
SDL_AtomicUnlock
#define SDL_AtomicUnlock
Definition: SDL_dynapi_overrides.h:65
SDL_SpinLock
int SDL_SpinLock
Definition: SDL_atomic.h:89
SDL_TRUE
@ SDL_TRUE
Definition: SDL_stdinc.h:164
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:30
SDL_MemoryBarrierAcquire
#define SDL_MemoryBarrierAcquire()
Definition: SDL_atomic.h:208
SDL_Generic_GetTLSData
SDL_TLSData * SDL_Generic_GetTLSData(void)
Definition: SDL_thread.c:124
lock
SDL_mutex * lock
Definition: SDL_events.c:83