Mercurial > sdl-ios-xcode
comparison src/thread/pth/SDL_systhread.c @ 1895:c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 10 Jul 2006 21:04:37 +0000 |
parents | cf7528eded83 |
children | 4436464c4f51 |
comparison
equal
deleted
inserted
replaced
1894:c69cee13dd76 | 1895:c121d94672cb |
---|---|
34 #include "../SDL_thread_c.h" | 34 #include "../SDL_thread_c.h" |
35 #include "../SDL_systhread.h" | 35 #include "../SDL_systhread.h" |
36 | 36 |
37 /* List of signals to mask in the subthreads */ | 37 /* List of signals to mask in the subthreads */ |
38 static int sig_list[] = { | 38 static int sig_list[] = { |
39 SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGALRM, SIGTERM, SIGCHLD, SIGWINCH, | 39 SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGALRM, SIGTERM, SIGCHLD, SIGWINCH, |
40 SIGVTALRM, SIGPROF, 0 | 40 SIGVTALRM, SIGPROF, 0 |
41 }; | 41 }; |
42 | 42 |
43 static void *RunThread(void *data) | 43 static void * |
44 RunThread(void *data) | |
44 { | 45 { |
45 SDL_RunThread(data); | 46 SDL_RunThread(data); |
46 pth_exit((void*)0); | 47 pth_exit((void *) 0); |
47 return((void *)0); /* Prevent compiler warning */ | 48 return ((void *) 0); /* Prevent compiler warning */ |
48 } | 49 } |
49 | 50 |
50 int SDL_SYS_CreateThread(SDL_Thread *thread, void *args) | 51 int |
52 SDL_SYS_CreateThread(SDL_Thread * thread, void *args) | |
51 { | 53 { |
52 pth_attr_t type; | 54 pth_attr_t type; |
53 | 55 |
54 /* Create a new attribute */ | 56 /* Create a new attribute */ |
55 type = pth_attr_new(); | 57 type = pth_attr_new(); |
56 if ( type == NULL ) { | 58 if (type == NULL) { |
57 SDL_SetError("Couldn't initialize pth attributes"); | 59 SDL_SetError("Couldn't initialize pth attributes"); |
58 return(-1); | 60 return (-1); |
59 } | 61 } |
60 pth_attr_set(type, PTH_ATTR_JOINABLE, TRUE); | 62 pth_attr_set(type, PTH_ATTR_JOINABLE, TRUE); |
61 | 63 |
62 /* Create the thread and go! */ | 64 /* Create the thread and go! */ |
63 thread->handle = pth_spawn(type, RunThread, args); | 65 thread->handle = pth_spawn(type, RunThread, args); |
64 if ( thread->handle == NULL ) { | 66 if (thread->handle == NULL) { |
65 SDL_SetError("Not enough resources to create thread"); | 67 SDL_SetError("Not enough resources to create thread"); |
66 return(-1); | 68 return (-1); |
67 } | 69 } |
68 return(0); | 70 return (0); |
69 } | 71 } |
70 | 72 |
71 void SDL_SYS_SetupThread(void) | 73 void |
74 SDL_SYS_SetupThread(void) | |
72 { | 75 { |
73 int i; | 76 int i; |
74 sigset_t mask; | 77 sigset_t mask; |
75 int oldstate; | 78 int oldstate; |
76 | 79 |
77 /* Mask asynchronous signals for this thread */ | 80 /* Mask asynchronous signals for this thread */ |
78 sigemptyset(&mask); | 81 sigemptyset(&mask); |
79 for ( i=0; sig_list[i]; ++i ) { | 82 for (i = 0; sig_list[i]; ++i) { |
80 sigaddset(&mask, sig_list[i]); | 83 sigaddset(&mask, sig_list[i]); |
81 } | 84 } |
82 pth_sigmask(SIG_BLOCK, &mask, 0); | 85 pth_sigmask(SIG_BLOCK, &mask, 0); |
83 | 86 |
84 /* Allow ourselves to be asynchronously cancelled */ | 87 /* Allow ourselves to be asynchronously cancelled */ |
85 pth_cancel_state(PTH_CANCEL_ASYNCHRONOUS, &oldstate); | 88 pth_cancel_state(PTH_CANCEL_ASYNCHRONOUS, &oldstate); |
86 } | 89 } |
87 | 90 |
88 /* WARNING: This may not work for systems with 64-bit pid_t */ | 91 /* WARNING: This may not work for systems with 64-bit pid_t */ |
89 Uint32 SDL_ThreadID(void) | 92 Uint32 |
93 SDL_ThreadID(void) | |
90 { | 94 { |
91 return((Uint32)pth_self()); | 95 return ((Uint32) pth_self()); |
92 } | 96 } |
93 | 97 |
94 void SDL_SYS_WaitThread(SDL_Thread *thread) | 98 void |
99 SDL_SYS_WaitThread(SDL_Thread * thread) | |
95 { | 100 { |
96 pth_join(thread->handle, NULL); | 101 pth_join(thread->handle, NULL); |
97 } | 102 } |
98 | 103 |
99 void SDL_SYS_KillThread(SDL_Thread *thread) | 104 void |
105 SDL_SYS_KillThread(SDL_Thread * thread) | |
100 { | 106 { |
101 pth_cancel(thread->handle); | 107 pth_cancel(thread->handle); |
102 pth_join(thread->handle, NULL); | 108 pth_join(thread->handle, NULL); |
103 } | 109 } |
110 | |
111 /* vi: set ts=4 sw=4 expandtab: */ |