aboutsummaryrefslogtreecommitdiff
path: root/src/modules/systemlib
diff options
context:
space:
mode:
authorpx4dev <px4@purgatory.org>2013-09-18 21:47:10 -0700
committerpx4dev <px4@purgatory.org>2013-09-18 21:47:29 -0700
commit7e0da345f06babd2b99670b559c5c7faf96b6997 (patch)
treecfefda9208303483c6c958044e56aca3b494dee0 /src/modules/systemlib
parent626f433630697a630e5063f4f53cfa570bb4a9df (diff)
downloadpx4-firmware-7e0da345f06babd2b99670b559c5c7faf96b6997.tar.gz
px4-firmware-7e0da345f06babd2b99670b559c5c7faf96b6997.tar.bz2
px4-firmware-7e0da345f06babd2b99670b559c5c7faf96b6997.zip
The parameter system is supposed to have a lock; implement one.
Diffstat (limited to 'src/modules/systemlib')
-rw-r--r--src/modules/systemlib/param/param.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/modules/systemlib/param/param.c b/src/modules/systemlib/param/param.c
index e7c96fe54..2832d87ef 100644
--- a/src/modules/systemlib/param/param.c
+++ b/src/modules/systemlib/param/param.c
@@ -48,6 +48,7 @@
#include <unistd.h>
#include <systemlib/err.h>
#include <errno.h>
+#include <semaphore.h>
#include <sys/stat.h>
@@ -95,18 +96,20 @@ ORB_DEFINE(parameter_update, struct parameter_update_s);
/** parameter update topic handle */
static orb_advert_t param_topic = -1;
+static sem_t param_lock = { .semcount = 1 };
+
/** lock the parameter store */
static void
param_lock(void)
{
- /* XXX */
+ do {} while (sem_wait(&param_lock) != 0);
}
/** unlock the parameter store */
static void
param_unlock(void)
{
- /* XXX */
+ sem_post(&param_lock);
}
/** assert that the parameter store is locked */