summaryrefslogtreecommitdiff
path: root/src/kernel/ao_mutex.c
diff options
context:
space:
mode:
authorBdale Garbee <bdale@gag.com>2014-09-09 23:28:39 -0600
committerBdale Garbee <bdale@gag.com>2014-09-09 23:28:39 -0600
commit16405fd3eb6f82ef3a709e3ed30fc48faef7b547 (patch)
treec111819b3ba0c9357af41c81b798326b9df7adad /src/kernel/ao_mutex.c
parent5a2f6ed6210844f7284fbf9f7ecba68c8a14fa52 (diff)
parent28bd5057252e61bc5b1a35a00bc1f9fdfde097f7 (diff)
Merge branch 'branch-1.5' into debian
Conflicts: ChangeLog Releasing altosui/Instdrv/NSIS/Includes/java.nsh altosui/altos-windows.nsi.in configure.ac doc/Makefile doc/altusmetrum.xsl micropeak/micropeak-windows.nsi.in telegps/telegps-windows.nsi.in
Diffstat (limited to 'src/kernel/ao_mutex.c')
-rw-r--r--src/kernel/ao_mutex.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/kernel/ao_mutex.c b/src/kernel/ao_mutex.c
index 952ff462..a36fe939 100644
--- a/src/kernel/ao_mutex.c
+++ b/src/kernel/ao_mutex.c
@@ -17,6 +17,29 @@
#include "ao.h"
+#ifndef HAS_MUTEX_TRY
+#define HAS_MUTEX_TRY 1
+#endif
+
+#if HAS_MUTEX_TRY
+
+uint8_t
+ao_mutex_try(__xdata uint8_t *mutex, uint8_t task_id) __reentrant
+{
+ uint8_t ret;
+ if (*mutex == task_id)
+ ao_panic(AO_PANIC_MUTEX);
+ ao_arch_critical(
+ if (*mutex)
+ ret = 0;
+ else {
+ *mutex = task_id;
+ ret = 1;
+ });
+ return ret;
+}
+#endif
+
void
ao_mutex_get(__xdata uint8_t *mutex) __reentrant
{