make rule for user header file install
[lunaix-os.git] / lunaix-os / kernel / ds / mutex.c
index 41e131d6d57db71bdfec25a412bf125da10dde45..4aac422191e5f3cc21721e18c59c7e9ba23c2642 100644 (file)
@@ -2,6 +2,12 @@
 #include <lunaix/process.h>
 #include <lunaix/kpreempt.h>
 
+#define __do_lock(mutext)               \
+    ({                                  \
+        atomic_fetch_add(&mutex->lk, 1);\
+        mutex->owner = __current->pid;  \
+    })
+
 static inline bool must_inline
 __mutex_check_owner(mutex_t* mutex)
 {
@@ -15,8 +21,7 @@ __mutext_lock(mutex_t* mutex)
         preempt_current();
     }
 
-    atomic_fetch_add(&mutex->lk, 1);
-    mutex->owner = __current->pid;
+    __do_lock(mutex);
 }
 
 static inline void must_inline
@@ -32,6 +37,16 @@ mutex_lock(mutex_t* mutex)
     __mutext_lock(mutex);
 }
 
+bool
+mutex_trylock(mutex_t* mutex)
+{
+    if (atomic_load(&mutex->lk))
+        return false;
+
+    __do_lock(mutex);
+    return true;
+}
+
 void
 mutex_unlock(mutex_t* mutex)
 {