X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=libs%2Fpsys%2Fpsys.c;h=25f24870f7e067a1caae14ea6047119fa307ab55;hb=6bdfcf4ad3daddcd9d689deb15798403c89ce42b;hp=6825ae7eff0ce0089495707b613db1e986f52cc3;hpb=fca3f24e31b3bbbe81ce0ef00da901480a2a92cc;p=andemo diff --git a/libs/psys/psys.c b/libs/psys/psys.c index 6825ae7..25f2487 100644 --- a/libs/psys/psys.c +++ b/libs/psys/psys.c @@ -21,7 +21,9 @@ along with this program. If not, see . #include #include #include "psys.h" +#ifdef PSYS_MULTITHREADED #include +#endif static int spawn_particle(struct psys_emitter *em, struct psys_particle *p); static void update_particle(struct psys_emitter *em, struct psys_particle *p, long tm, float dt, void *cls); @@ -29,7 +31,9 @@ static void update_particle(struct psys_emitter *em, struct psys_particle *p, lo /* particle pool */ static struct psys_particle *ppool; static int ppool_size; +#ifdef PSYS_MULTITHREADED static pthread_mutex_t pool_lock = PTHREAD_MUTEX_INITIALIZER; +#endif static struct psys_particle *palloc(void); static void pfree(struct psys_particle *p); @@ -347,7 +351,9 @@ static struct psys_particle *palloc(void) { struct psys_particle *p; +#ifdef PSYS_MULTITHREADED pthread_mutex_lock(&pool_lock); +#endif if(ppool) { p = ppool; ppool = ppool->next; @@ -355,16 +361,22 @@ static struct psys_particle *palloc(void) } else { p = malloc(sizeof *p); } +#ifdef PSYS_MULTITHREADED pthread_mutex_unlock(&pool_lock); +#endif return p; } static void pfree(struct psys_particle *p) { +#ifdef PSYS_MULTITHREADED pthread_mutex_lock(&pool_lock); +#endif p->next = ppool; ppool = p; ppool_size++; +#ifdef PSYS_MULTITHREADED pthread_mutex_unlock(&pool_lock); +#endif }