add IPCRecursiveMutexLocker + tests

Change-Id: Ie7fca7032266935278e646534bea1180136fd3d0
diff --git a/aos/linux_code/ipc_lib/mutex.cc b/aos/linux_code/ipc_lib/mutex.cc
index 9e270c9..796b841 100644
--- a/aos/linux_code/ipc_lib/mutex.cc
+++ b/aos/linux_code/ipc_lib/mutex.cc
@@ -15,7 +15,7 @@
 }
 
 Mutex::~Mutex() {
-  if (__builtin_expect(mutex_islocked(&impl_), 0)) {
+  if (__builtin_expect(mutex_islocked(&impl_), false)) {
     LOG(FATAL, "destroying locked mutex %p (aka %p)\n",
         this, &impl_);
   }
@@ -51,4 +51,8 @@
   }
 }
 
+bool Mutex::OwnedBySelf() const {
+  return mutex_islocked(&impl_);
+}
+
 }  // namespace aos