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
}