comparison src/thread/riscos/SDL_systhread.c @ 1662:782fd950bd46 SDL-1.3

Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API. WARNING: None of the video drivers have been updated for the new API yet! The API is still under design and very fluid. The code is now run through a consistent indent format: indent -i4 -nut -nsc -br -ce The headers are being converted to automatically generate doxygen documentation.
author Sam Lantinga <slouken@libsdl.org>
date Sun, 28 May 2006 13:04:16 +0000
parents d910939febfa
children 4da1ee79c9af
comparison
equal deleted inserted replaced
1661:281d3f4870e5 1662:782fd950bd46
26 #include "SDL_thread.h" 26 #include "SDL_thread.h"
27 #include "../SDL_systhread.h" 27 #include "../SDL_systhread.h"
28 28
29 #if SDL_THREADS_DISABLED 29 #if SDL_THREADS_DISABLED
30 30
31 int SDL_SYS_CreateThread(SDL_Thread *thread, void *args) 31 int
32 SDL_SYS_CreateThread (SDL_Thread * thread, void *args)
32 { 33 {
33 SDL_SetError("Threads have not been compiled into this version of the library"); 34 SDL_SetError
34 return(-1); 35 ("Threads have not been compiled into this version of the library");
36 return (-1);
35 } 37 }
36 38
37 void SDL_SYS_SetupThread(void) 39 void
40 SDL_SYS_SetupThread (void)
38 { 41 {
39 return; 42 return;
40 } 43 }
41 44
42 Uint32 SDL_ThreadID(void) 45 Uint32
46 SDL_ThreadID (void)
43 { 47 {
44 return(0); 48 return (0);
45 } 49 }
46 50
47 void SDL_SYS_WaitThread(SDL_Thread *thread) 51 void
52 SDL_SYS_WaitThread (SDL_Thread * thread)
48 { 53 {
49 return; 54 return;
50 } 55 }
51 56
52 void SDL_SYS_KillThread(SDL_Thread *thread) 57 void
58 SDL_SYS_KillThread (SDL_Thread * thread)
53 { 59 {
54 return; 60 return;
55 } 61 }
56 62
57 #else 63 #else
58 64
59 #include <signal.h> 65 #include <signal.h>
60 66
61 /* List of signals to mask in the subthreads */ 67 /* List of signals to mask in the subthreads */
62 static int sig_list[] = { 68 static int sig_list[] = {
63 SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGALRM, SIGTERM, SIGCHLD, SIGWINCH, 69 SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGALRM, SIGTERM, SIGCHLD, SIGWINCH,
64 SIGVTALRM, SIGPROF, 0 70 SIGVTALRM, SIGPROF, 0
65 }; 71 };
66 72
67 #include <pthread.h> 73 #include <pthread.h>
68 74
69 int riscos_using_threads = 0; 75 int riscos_using_threads = 0;
70 Uint32 riscos_main_thread = 0; /* Thread running events */ 76 Uint32 riscos_main_thread = 0; /* Thread running events */
71 77
72 static void *RunThread(void *data) 78 static void *
79 RunThread (void *data)
73 { 80 {
74 SDL_RunThread(data); 81 SDL_RunThread (data);
75 pthread_exit((void*)0); 82 pthread_exit ((void *) 0);
76 return((void *)0); /* Prevent compiler warning */ 83 return ((void *) 0); /* Prevent compiler warning */
77 } 84 }
78 85
79 int SDL_SYS_CreateThread(SDL_Thread *thread, void *args) 86 int
87 SDL_SYS_CreateThread (SDL_Thread * thread, void *args)
80 { 88 {
81 pthread_attr_t type; 89 pthread_attr_t type;
82 90
83 /* Set the thread attributes */ 91 /* Set the thread attributes */
84 if ( pthread_attr_init(&type) != 0 ) { 92 if (pthread_attr_init (&type) != 0) {
85 SDL_SetError("Couldn't initialize pthread attributes"); 93 SDL_SetError ("Couldn't initialize pthread attributes");
86 return(-1); 94 return (-1);
87 } 95 }
88 pthread_attr_setdetachstate(&type, PTHREAD_CREATE_JOINABLE); 96 pthread_attr_setdetachstate (&type, PTHREAD_CREATE_JOINABLE);
89 97
90 /* Create the thread and go! */ 98 /* Create the thread and go! */
91 if ( pthread_create(&thread->handle, &type, RunThread, args) != 0 ) { 99 if (pthread_create (&thread->handle, &type, RunThread, args) != 0) {
92 SDL_SetError("Not enough resources to create thread"); 100 SDL_SetError ("Not enough resources to create thread");
93 return(-1); 101 return (-1);
94 } 102 }
95 103
96 if (riscos_using_threads == 0) 104 if (riscos_using_threads == 0) {
97 { 105 riscos_using_threads = 1;
98 riscos_using_threads = 1; 106 riscos_main_thread = SDL_ThreadID ();
99 riscos_main_thread = SDL_ThreadID(); 107 }
100 } 108
101 109 return (0);
102 return(0);
103 } 110 }
104 111
105 void SDL_SYS_SetupThread(void) 112 void
113 SDL_SYS_SetupThread (void)
106 { 114 {
107 int i; 115 int i;
108 sigset_t mask; 116 sigset_t mask;
109 117
110 /* Mask asynchronous signals for this thread */ 118 /* Mask asynchronous signals for this thread */
111 sigemptyset(&mask); 119 sigemptyset (&mask);
112 for ( i=0; sig_list[i]; ++i ) { 120 for (i = 0; sig_list[i]; ++i) {
113 sigaddset(&mask, sig_list[i]); 121 sigaddset (&mask, sig_list[i]);
114 } 122 }
115 pthread_sigmask(SIG_BLOCK, &mask, 0); 123 pthread_sigmask (SIG_BLOCK, &mask, 0);
116 124
117 #ifdef PTHREAD_CANCEL_ASYNCHRONOUS 125 #ifdef PTHREAD_CANCEL_ASYNCHRONOUS
118 /* Allow ourselves to be asynchronously cancelled */ 126 /* Allow ourselves to be asynchronously cancelled */
119 { int oldstate; 127 {
120 pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldstate); 128 int oldstate;
121 } 129 pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, &oldstate);
130 }
122 #endif 131 #endif
123 } 132 }
124 133
125 Uint32 SDL_ThreadID(void) 134 Uint32
135 SDL_ThreadID (void)
126 { 136 {
127 return((Uint32)pthread_self()); 137 return ((Uint32) pthread_self ());
128 } 138 }
129 139
130 void SDL_SYS_WaitThread(SDL_Thread *thread) 140 void
141 SDL_SYS_WaitThread (SDL_Thread * thread)
131 { 142 {
132 pthread_join(thread->handle, 0); 143 pthread_join (thread->handle, 0);
133 } 144 }
134 145
135 void SDL_SYS_KillThread(SDL_Thread *thread) 146 void
147 SDL_SYS_KillThread (SDL_Thread * thread)
136 { 148 {
137 #ifdef PTHREAD_CANCEL_ASYNCHRONOUS 149 #ifdef PTHREAD_CANCEL_ASYNCHRONOUS
138 pthread_cancel(thread->handle); 150 pthread_cancel (thread->handle);
139 #else 151 #else
140 pthread_kill(thread->handle, SIGKILL); 152 pthread_kill (thread->handle, SIGKILL);
141 #endif 153 #endif
142 } 154 }
143 155
144 #endif 156 #endif
157 /* vi: set ts=4 sw=4 expandtab: */