#include <float.h>
#include <assert.h>
#include "psys.h"
+#ifdef PSYS_MULTITHREADED
#include <pthread.h>
+#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);
/* 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);
{
struct psys_particle *p;
+#ifdef PSYS_MULTITHREADED
pthread_mutex_lock(&pool_lock);
+#endif
if(ppool) {
p = ppool;
ppool = ppool->next;
} 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
}