Mercurial > sdl-ios-xcode
annotate src/thread/pth/SDL_systhread.c @ 998:0e6627072f7a
Date: Wed, 24 Nov 2004 01:25:48 +0100
From: Stephane Marchesin
Subject: Re: [SDL] Problem compiling SDL 1.2.7
- there is a bug that was introduced in the kernel headers for 2.6.9
which is fixed in 2.6.10. This bug *will* byte when compiling the cdrom
subsystem. A patch that works around this bug is attached. Note that
users affected are not those running 2.6.9, but those using the 2.6.9
kernel headers for their system (i.e. whose libc is built against 2.6.9
headers).
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 30 Nov 2004 14:45:08 +0000 |
parents | b8d311d90021 |
children | c9b51268668f |
rev | line source |
---|---|
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 SDL - Simple DirectMedia Layer |
769
b8d311d90021
Updated copyright information for 2004 (Happy New Year!)
Sam Lantinga <slouken@libsdl.org>
parents:
397
diff
changeset
|
3 Copyright (C) 1997-2004 Sam Lantinga |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 This library is free software; you can redistribute it and/or |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
6 modify it under the terms of the GNU Library General Public |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 License as published by the Free Software Foundation; either |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 version 2 of the License, or (at your option) any later version. |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 This library is distributed in the hope that it will be useful, |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
13 Library General Public License for more details. |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
15 You should have received a copy of the GNU Library General Public |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
16 License along with this library; if not, write to the Free |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 Sam Lantinga |
252
e8157fcb3114
Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
185
diff
changeset
|
20 slouken@libsdl.org |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 */ |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
22 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 #ifdef SAVE_RCSID |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
24 static char rcsid = |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 "@(#) $Id$"; |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
26 #endif |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
27 |
329
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
321
diff
changeset
|
28 /* |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
321
diff
changeset
|
29 * GNU pth threads |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
321
diff
changeset
|
30 * |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
321
diff
changeset
|
31 * Patrice Mandin |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
321
diff
changeset
|
32 */ |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
33 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
34 #include "SDL_error.h" |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
35 #include "SDL_thread.h" |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
36 #include "SDL_systhread.h" |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
37 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
38 #include <signal.h> |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
39 #include <pth.h> |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
40 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
41 /* List of signals to mask in the subthreads */ |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
42 static int sig_list[] = { |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
43 SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGALRM, SIGTERM, SIGCHLD, SIGWINCH, |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
44 SIGVTALRM, SIGPROF, 0 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
45 }; |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
46 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
47 static void *RunThread(void *data) |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
48 { |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
49 SDL_RunThread(data); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
50 pth_exit((void*)0); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
51 return((void *)0); /* Prevent compiler warning */ |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
52 } |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
53 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
54 int SDL_SYS_CreateThread(SDL_Thread *thread, void *args) |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
55 { |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
56 pth_attr_t type; |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
57 |
329
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
321
diff
changeset
|
58 /* Create a new attribute */ |
321
af42e7c4c860
Fixes for GNU pthreads from Patrice
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
59 type = pth_attr_new(); |
329
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
321
diff
changeset
|
60 if ( type == NULL ) { |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
61 SDL_SetError("Couldn't initialize pth attributes"); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
62 return(-1); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
63 } |
321
af42e7c4c860
Fixes for GNU pthreads from Patrice
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
64 pth_attr_set(type, PTH_ATTR_JOINABLE, TRUE); |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
65 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
66 /* Create the thread and go! */ |
397 | 67 thread->handle = pth_spawn(type, RunThread, args); |
68 if ( thread->handle == NULL ) { | |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
69 SDL_SetError("Not enough resources to create thread"); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
70 return(-1); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
71 } |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
72 return(0); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
73 } |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
74 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
75 void SDL_SYS_SetupThread(void) |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
76 { |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
77 int i; |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
78 sigset_t mask; |
329
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
321
diff
changeset
|
79 int oldstate; |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
80 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
81 /* Mask asynchronous signals for this thread */ |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
82 sigemptyset(&mask); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
83 for ( i=0; sig_list[i]; ++i ) { |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
84 sigaddset(&mask, sig_list[i]); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
85 } |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
86 pth_sigmask(SIG_BLOCK, &mask, 0); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
87 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
88 /* Allow ourselves to be asynchronously cancelled */ |
329
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
321
diff
changeset
|
89 pth_cancel_state(PTH_CANCEL_ASYNCHRONOUS, &oldstate); |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
90 } |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
91 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
92 /* WARNING: This may not work for systems with 64-bit pid_t */ |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
93 Uint32 SDL_ThreadID(void) |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
94 { |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
95 return((Uint32)pth_self()); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
96 } |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
97 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
98 void SDL_SYS_WaitThread(SDL_Thread *thread) |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
99 { |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
100 pth_join(thread->handle, 0); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
101 } |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
102 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
103 void SDL_SYS_KillThread(SDL_Thread *thread) |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
104 { |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
105 pth_cancel(thread->handle); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
106 pth_join(thread->handle, NULL); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
107 } |