Mercurial > sdl-ios-xcode
annotate src/thread/pth/SDL_sysmutex.c @ 1199:2d6dc7de1145
From: Mike Frysinger <vapier@gentoo.org>
To: sdl@libsdl.org
Date: Sun, 11 Dec 2005 22:57:37 -0500
Subject: [SDL] exec stack in libsdl update
i posted back in September a patch to remove executable stacks:
http://www.devolution.com/pipermail/sdl/2005-September/070626.html
later in November, a similar patch was merged it seems:
http://www.libsdl.org/cgi/cvsweb.cgi/SDL12/src/hermes/mmx_main.asm
however, this lacks the additional output format checks that i posted in my
patch ... this isnt a problem if the hermes asm code is only ever used to
produce ELF objects, but if this is not true, then the additional checks in
my original patch will need to be merged
-mike
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Mon, 12 Dec 2005 09:13:12 +0000 |
parents | 1d74ddc90cb2 |
children | 3692456e7b0f |
rev | line source |
---|---|
329
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 * GNU pth mutexes |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
3 * |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 * Patrice Mandin |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 */ |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
6 |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 #include <stdio.h> |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 #include <stdlib.h> |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 #include <pth.h> |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 #include "SDL_error.h" |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 #include "SDL_mutex.h" |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
13 #include "SDL_sysmutex_c.h" |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
15 /* Create a mutex */ |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
16 SDL_mutex *SDL_CreateMutex(void) |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
17 { |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 SDL_mutex *mutex; |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 /* Allocate mutex memory */ |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 mutex = (SDL_mutex *)malloc(sizeof(*mutex)); |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
22 if ( mutex ) { |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 /* Create the mutex, with initial value signaled */ |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
24 if (!pth_mutex_init(&(mutex->mutexpth_p))) { |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 SDL_SetError("Couldn't create mutex"); |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
26 free(mutex); |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
27 mutex = NULL; |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
28 } |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 } else { |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
30 SDL_OutOfMemory(); |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
31 } |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
32 return(mutex); |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
33 } |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
34 |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
35 /* Free the mutex */ |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
36 void SDL_DestroyMutex(SDL_mutex *mutex) |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
37 { |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
38 if ( mutex ) { |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
39 free(mutex); |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
40 } |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
41 } |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
42 |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
43 /* Lock the mutex */ |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
44 int SDL_mutexP(SDL_mutex *mutex) |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
45 { |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
46 if ( mutex == NULL ) { |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
47 SDL_SetError("Passed a NULL mutex"); |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
48 return -1; |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
49 } |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
50 |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
51 pth_mutex_acquire(&(mutex->mutexpth_p), FALSE, NULL); |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
52 |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
53 return(0); |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
54 } |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
55 |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
56 /* Unlock the mutex */ |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
57 int SDL_mutexV(SDL_mutex *mutex) |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
58 { |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
59 if ( mutex == NULL ) { |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
60 SDL_SetError("Passed a NULL mutex"); |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
61 return -1; |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
62 } |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
63 |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
64 pth_mutex_release(&(mutex->mutexpth_p)); |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
65 |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
66 return(0); |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
67 } |