torturethread.c File Reference
`#include <stdio.h>`
`#include <stdlib.h>`
`#include <signal.h>`
`#include <string.h>`
`#include "SDL.h"`
Include dependency graph for torturethread.c:

Go to the source code of this file.

## Macros

#define | NUMTHREADS 10

## Functions

static void | quit (int rc)
int | SubThreadFunc (void *data)
int | ThreadFunc (void *data)
int | main (int argc, char *argv[])

## Variables

static SDL_atomic_t | time_for_threads_to_die [NUMTHREADS]

## Macro Definition Documentation

## NUMTHREADS

#define NUMTHREADS 10

Definition at line 22 of file torturethread.c.

Referenced by main(), and ThreadFunc().

## Function Documentation

## main()

int main | ( | int | argc,
|  | char * | argv[]
| ) |  |

Definition at line 77 of file torturethread.c.

References i, NULL, NUMTHREADS, quit(), SDL_AtomicSet, SDL_CreateThread, SDL_GetError, SDL_Init, SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, SDL_LogError, SDL_LogSetPriority, SDL_Quit, SDL_snprintf, SDL_WaitThread, ThreadFunc(), and threads.

{
SDL_Thread *threads[NUMTHREADS];
int i;
/* Enable standard application logging */
SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
/* Load the SDL library */
if (SDL_Init(0) < 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError());
return (1);
}
signal(SIGSEGV, SIG_DFL);
for (i = 0; i < NUMTHREADS; i++) {
char name[64];
SDL_snprintf(name, sizeof (name), "Parent%d", i);
SDL_AtomicSet(&time_for_threads_to_die[i], 0);
threads[i] = SDL_CreateThread(ThreadFunc, name, (void*) (uintptr_t) i);
if (threads[i] == NULL) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread: %s\n", SDL_GetError());
quit(1);
}
}
for (i = 0; i < NUMTHREADS; i++) {
SDL_AtomicSet(&time_for_threads_to_die[i], 1);
}
for (i = 0; i < NUMTHREADS; i++) {
SDL_WaitThread(threads[i], NULL);
}
SDL_Quit();
return (0);
}
quit
static void quit(int rc)
Definition: torturethread.c:28
SDL_GetError
#define SDL_GetError
Definition: SDL_dynapi_overrides.h:113
NUMTHREADS
#define NUMTHREADS
Definition: torturethread.c:22
name
GLuint const GLchar * name
Definition: SDL_opengl_glext.h:660
SDL_LogError
#define SDL_LogError
Definition: SDL_dynapi_overrides.h:36
SDL_Quit
#define SDL_Quit
Definition: SDL_dynapi_overrides.h:58
ThreadFunc
int ThreadFunc(void *data)
Definition: torturethread.c:44
uintptr_t
unsigned int uintptr_t
Definition: SDL_config_windows.h:70
SDL_LOG_PRIORITY_INFO
Definition: SDL_log.h:106
SDL_CreateThread
#define SDL_CreateThread
Definition: SDL_dynapi_overrides.h:41
i
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:50
SDL_LogSetPriority
#define SDL_LogSetPriority
Definition: SDL_dynapi_overrides.h:236
NULL
#define NULL
Definition: begin_code.h:164
threads
static SDL_Thread * threads[6]
Definition: testlock.c:25
SDL_AtomicSet
#define SDL_AtomicSet
Definition: SDL_dynapi_overrides.h:67
SDL_snprintf
#define SDL_snprintf
Definition: SDL_dynapi_overrides.h:40
SDL_Thread
Definition: SDL_thread_c.h:54
SDL_Init
#define SDL_Init
Definition: SDL_dynapi_overrides.h:54
time_for_threads_to_die
static SDL_atomic_t time_for_threads_to_die[NUMTHREADS]
Definition: torturethread.c:24
SDL_LOG_CATEGORY_APPLICATION
Definition: SDL_log.h:66
SDL_WaitThread
#define SDL_WaitThread
Definition: SDL_dynapi_overrides.h:478

## quit()

static void quit | ( | int | rc | ) |

static

Definition at line 28 of file torturethread.c.

References SDL_Quit, and SDLCALL.

Referenced by main().

{
SDL_Quit();
exit(rc);
}
SDL_Quit
#define SDL_Quit
Definition: SDL_dynapi_overrides.h:58

## SubThreadFunc()

int SubThreadFunc | ( | void * | data | ) |

Definition at line 35 of file torturethread.c.

References SDLCALL.

Referenced by ThreadFunc().

{
while (!*(int volatile *) data) {
; /* SDL_Delay(10); *//* do nothing */
}
return 0;
}
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1974

## ThreadFunc()

int ThreadFunc | ( | void * | data | ) |

Definition at line 44 of file torturethread.c.

References i, NULL, NUMTHREADS, SDL_AtomicGet, SDL_CreateThread, SDL_Log, SDL_snprintf, SDL_WaitThread, and SubThreadFunc().

Referenced by main().

{
SDL_Thread *sub_threads[NUMTHREADS];
int flags[NUMTHREADS];
int i;
int tid = (int) (uintptr_t) data;
SDL_Log("Creating Thread %d\n", tid);
for (i = 0; i < NUMTHREADS; i++) {
char name[64];
SDL_snprintf(name, sizeof (name), "Child%d_%d", tid, i);
flags[i] = 0;
sub_threads[i] = SDL_CreateThread(SubThreadFunc, name, &flags[i]);
}
SDL_Log("Thread '%d' waiting for signal\n", tid);
while (SDL_AtomicGet(&time_for_threads_to_die[tid]) != 1) {
; /* do nothing */
}
SDL_Log("Thread '%d' sending signals to subthreads\n", tid);
for (i = 0; i < NUMTHREADS; i++) {
flags[i] = 1;
SDL_WaitThread(sub_threads[i], NULL);
}
SDL_Log("Thread '%d' exiting!\n", tid);
return 0;
}
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1974
NUMTHREADS
#define NUMTHREADS
Definition: torturethread.c:22
name
GLuint const GLchar * name
Definition: SDL_opengl_glext.h:660
SDL_Log
#define SDL_Log
Definition: SDL_dynapi_overrides.h:31
uintptr_t
unsigned int uintptr_t
Definition: SDL_config_windows.h:70
SDL_CreateThread
#define SDL_CreateThread
Definition: SDL_dynapi_overrides.h:41
i
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:50
NULL
#define NULL
Definition: begin_code.h:164
flags
GLbitfield flags
Definition: SDL_opengl_glext.h:1480
SDL_AtomicGet
#define SDL_AtomicGet
Definition: SDL_dynapi_overrides.h:68
SDL_snprintf
#define SDL_snprintf
Definition: SDL_dynapi_overrides.h:40
SDL_Thread
Definition: SDL_thread_c.h:54
SubThreadFunc
int SubThreadFunc(void *data)
Definition: torturethread.c:35
time_for_threads_to_die
static SDL_atomic_t time_for_threads_to_die[NUMTHREADS]
Definition: torturethread.c:24
SDL_WaitThread
#define SDL_WaitThread
Definition: SDL_dynapi_overrides.h:478

## Variable Documentation

## time_for_threads_to_die

SDL_atomic_t time_for_threads_to_die[NUMTHREADS]

static

Definition at line 24 of file torturethread.c.