DarkPlaces
Game engine based on the Quake 1 engine by id Software, developed by LadyHavoc
 
thread_pthread.c File Reference
#include "quakedef.h"
#include "thread.h"
#include <pthread.h>
#include <stdint.h>
+ Include dependency graph for thread_pthread.c:

Go to the source code of this file.

Data Structures

struct  barrier_t
 

Macros

#define __USE_UNIX98
 

Functions

int _Thread_CondBroadcast (void *cond, const char *filename, int fileline)
 
int _Thread_CondSignal (void *cond, const char *filename, int fileline)
 
int _Thread_CondWait (void *cond, void *mutex, const char *filename, int fileline)
 
void_Thread_CreateBarrier (unsigned int count, const char *filename, int fileline)
 
void_Thread_CreateCond (const char *filename, int fileline)
 
void_Thread_CreateMutex (const char *filename, int fileline)
 
void_Thread_CreateThread (int(*fn)(void *), void *data, const char *filename, int fileline)
 
void _Thread_DestroyBarrier (void *barrier, const char *filename, int fileline)
 
void _Thread_DestroyCond (void *cond, const char *filename, int fileline)
 
void _Thread_DestroyMutex (void *mutex, const char *filename, int fileline)
 
int _Thread_LockMutex (void *mutex, const char *filename, int fileline)
 
int _Thread_UnlockMutex (void *mutex, const char *filename, int fileline)
 
void _Thread_WaitBarrier (void *barrier, const char *filename, int fileline)
 
int _Thread_WaitThread (void *thread, int retval, const char *filename, int fileline)
 
qbool Thread_HasThreads (void)
 
int Thread_Init (void)
 
void Thread_Shutdown (void)
 

Macro Definition Documentation

◆ __USE_UNIX98

#define __USE_UNIX98

Definition at line 4 of file thread_pthread.c.

Function Documentation

◆ _Thread_CondBroadcast()

int _Thread_CondBroadcast ( void * cond,
const char * filename,
int fileline )

Definition at line 101 of file thread_pthread.c.

102{
103 pthread_cond_t *condp = (pthread_cond_t *) cond;
104#ifdef THREADDEBUG
105 Sys_Printf("%p cond broadcast %s:%i\n" , cond, filename, fileline);
106#endif
107 return pthread_cond_broadcast(condp);
108}
void Sys_Printf(const char *fmt,...)
used to report failures inside Con_Printf()
Definition sys_shared.c:652

References Sys_Printf().

◆ _Thread_CondSignal()

int _Thread_CondSignal ( void * cond,
const char * filename,
int fileline )

Definition at line 92 of file thread_pthread.c.

93{
94 pthread_cond_t *condp = (pthread_cond_t *) cond;
95#ifdef THREADDEBUG
96 Sys_Printf("%p cond signal %s:%i\n" , cond, filename, fileline);
97#endif
98 return pthread_cond_signal(condp);
99}

References Sys_Printf().

◆ _Thread_CondWait()

int _Thread_CondWait ( void * cond,
void * mutex,
const char * filename,
int fileline )

Definition at line 110 of file thread_pthread.c.

111{
112 pthread_cond_t *condp = (pthread_cond_t *) cond;
113 pthread_mutex_t *mutexp = (pthread_mutex_t *) mutex;
114#ifdef THREADDEBUG
115 Sys_Printf("%p cond wait %s:%i\n" , cond, filename, fileline);
116#endif
117 return pthread_cond_wait(condp, mutexp);
118}

References Sys_Printf().

◆ _Thread_CreateBarrier()

void * _Thread_CreateBarrier ( unsigned int count,
const char * filename,
int fileline )

Definition at line 185 of file thread_pthread.c.

186{
187 volatile barrier_t *b = (volatile barrier_t *) Z_Malloc(sizeof(barrier_t));
188#ifdef THREADDEBUG
189 Sys_Printf("%p barrier create(%d) %s:%i\n", b, count, filename, fileline);
190#endif
191 b->needed = count;
192 b->called = 0;
193 b->mutex = Thread_CreateMutex();
194 b->cond = Thread_CreateCond();
195 return (void *) b;
196}
GLenum GLenum GLsizei count
Definition glquake.h:656
dp_FragColor b
#define Thread_CreateMutex()
Definition thread.h:15
#define Thread_CreateCond()
Definition thread.h:19
#define Z_Malloc(size)
Definition zone.h:161

References b, count, Sys_Printf(), Thread_CreateCond, Thread_CreateMutex, and Z_Malloc.

◆ _Thread_CreateCond()

void * _Thread_CreateCond ( const char * filename,
int fileline )

Definition at line 72 of file thread_pthread.c.

73{
74 pthread_cond_t *condp = (pthread_cond_t *) Z_Malloc(sizeof(pthread_cond_t));
75 pthread_cond_init(condp, NULL);
76#ifdef THREADDEBUG
77 Sys_Printf("%p cond create %s:%i\n" , condp, filename, fileline);
78#endif
79 return condp;
80}
#define NULL
Definition qtypes.h:12

References NULL, Sys_Printf(), and Z_Malloc.

◆ _Thread_CreateMutex()

void * _Thread_CreateMutex ( const char * filename,
int fileline )

Definition at line 24 of file thread_pthread.c.

25{
26#ifdef THREADRECURSIVE
27 pthread_mutexattr_t attr;
28#endif
29 pthread_mutex_t *mutexp = (pthread_mutex_t *) Z_Malloc(sizeof(pthread_mutex_t));
30#ifdef THREADDEBUG
31 Sys_Printf("%p mutex create %s:%i\n" , mutexp, filename, fileline);
32#endif
33#ifdef THREADRECURSIVE
34 pthread_mutexattr_init(&attr);
35 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
36 pthread_mutex_init(mutexp, &attr);
37 pthread_mutexattr_destroy(&attr);
38#else
39 pthread_mutex_init(mutexp, NULL);
40#endif
41 return mutexp;
42}

References NULL, Sys_Printf(), and Z_Malloc.

◆ _Thread_CreateThread()

void * _Thread_CreateThread ( int(* fn )(void *),
void * data,
const char * filename,
int fileline )

Definition at line 120 of file thread_pthread.c.

121{
122 pthread_t *threadp = (pthread_t *) Z_Malloc(sizeof(pthread_t));
123#ifdef THREADDEBUG
124 Sys_Printf("%p thread create %s:%i\n" , threadp, filename, fileline);
125#endif
126 int r = pthread_create(threadp, NULL, (void * (*) (void *)) fn, data);
127 if(r)
128 {
129 Z_Free(threadp);
130 return NULL;
131 }
132 return threadp;
133}
GLsizeiptr const GLvoid * data
Definition glquake.h:639
dp_FragColor r
#define Z_Free(data)
Definition zone.h:164

References data, NULL, r, Sys_Printf(), Z_Free, and Z_Malloc.

◆ _Thread_DestroyBarrier()

void _Thread_DestroyBarrier ( void * barrier,
const char * filename,
int fileline )

Definition at line 198 of file thread_pthread.c.

199{
200 volatile barrier_t *b = (volatile barrier_t *) barrier;
201#ifdef THREADDEBUG
202 Sys_Printf("%p barrier destroy %s:%i\n", b, filename, fileline);
203#endif
204 Thread_DestroyMutex(b->mutex);
205 Thread_DestroyCond(b->cond);
206}
#define Thread_DestroyMutex(m)
Definition thread.h:16
#define Thread_DestroyCond(cond)
Definition thread.h:20

References b, Sys_Printf(), Thread_DestroyCond, and Thread_DestroyMutex.

◆ _Thread_DestroyCond()

void _Thread_DestroyCond ( void * cond,
const char * filename,
int fileline )

Definition at line 82 of file thread_pthread.c.

83{
84 pthread_cond_t *condp = (pthread_cond_t *) cond;
85#ifdef THREADDEBUG
86 Sys_Printf("%p cond destroy %s:%i\n" , cond, filename, fileline);
87#endif
88 pthread_cond_destroy(condp);
89 Z_Free(condp);
90}

References Sys_Printf(), and Z_Free.

◆ _Thread_DestroyMutex()

void _Thread_DestroyMutex ( void * mutex,
const char * filename,
int fileline )

Definition at line 44 of file thread_pthread.c.

45{
46 pthread_mutex_t *mutexp = (pthread_mutex_t *) mutex;
47#ifdef THREADDEBUG
48 Sys_Printf("%p mutex destroy %s:%i\n", mutex, filename, fileline);
49#endif
50 pthread_mutex_destroy(mutexp);
51 Z_Free(mutexp);
52}

References Sys_Printf(), and Z_Free.

◆ _Thread_LockMutex()

int _Thread_LockMutex ( void * mutex,
const char * filename,
int fileline )

Definition at line 54 of file thread_pthread.c.

55{
56 pthread_mutex_t *mutexp = (pthread_mutex_t *) mutex;
57#ifdef THREADDEBUG
58 Sys_Printf("%p mutex lock %s:%i\n" , mutex, filename, fileline);
59#endif
60 return pthread_mutex_lock(mutexp);
61}

References Sys_Printf().

◆ _Thread_UnlockMutex()

int _Thread_UnlockMutex ( void * mutex,
const char * filename,
int fileline )

Definition at line 63 of file thread_pthread.c.

64{
65 pthread_mutex_t *mutexp = (pthread_mutex_t *) mutex;
66#ifdef THREADDEBUG
67 Sys_Printf("%p mutex unlock %s:%i\n" , mutex, filename, fileline);
68#endif
69 return pthread_mutex_unlock(mutexp);
70}

References Sys_Printf().

◆ _Thread_WaitBarrier()

void _Thread_WaitBarrier ( void * barrier,
const char * filename,
int fileline )

Definition at line 208 of file thread_pthread.c.

209{
210 volatile barrier_t *b = (volatile barrier_t *) barrier;
211#ifdef THREADDEBUG
212 Sys_Printf("%p barrier wait %s:%i\n", b, filename, fileline);
213#endif
214 Thread_LockMutex(b->mutex);
215 b->called++;
216 if (b->called == b->needed) {
217 b->called = 0;
218 Thread_CondBroadcast(b->cond);
219 } else {
220 do {
221 Thread_CondWait(b->cond, b->mutex);
222 } while(b->called);
223 }
224 Thread_UnlockMutex(b->mutex);
225}
#define Thread_CondBroadcast(cond)
Definition thread.h:22
#define Thread_LockMutex(m)
Definition thread.h:17
#define Thread_UnlockMutex(m)
Definition thread.h:18
#define Thread_CondWait(cond, mutex)
Definition thread.h:23

References b, Sys_Printf(), Thread_CondBroadcast, Thread_CondWait, Thread_LockMutex, and Thread_UnlockMutex.

◆ _Thread_WaitThread()

int _Thread_WaitThread ( void * thread,
int retval,
const char * filename,
int fileline )

Definition at line 135 of file thread_pthread.c.

136{
137 pthread_t *threadp = (pthread_t *) thread;
138 void *status = (void *) (intptr_t) retval;
139#ifdef THREADDEBUG
140 Sys_Printf("%p thread wait %s:%i\n" , thread, filename, fileline);
141#endif
142 pthread_join(*threadp, &status);
143 Z_Free(threadp);
144 return (int) (intptr_t) status;
145}

References Sys_Printf(), and Z_Free.

◆ Thread_HasThreads()

qbool Thread_HasThreads ( void )

Definition at line 19 of file thread_pthread.c.

20{
21 return true;
22}

◆ Thread_Init()

int Thread_Init ( void )

Definition at line 10 of file thread_pthread.c.

11{
12 return 0;
13}

◆ Thread_Shutdown()

void Thread_Shutdown ( void )

Definition at line 15 of file thread_pthread.c.

16{
17}