diff --git a/native/jni/su/su.h b/native/jni/su/su.h index 917b4a011..c496e5bbf 100644 --- a/native/jni/su/su.h +++ b/native/jni/su/su.h @@ -5,6 +5,7 @@ #include #include +#include #define DEFAULT_SHELL "/system/bin/sh" @@ -29,8 +30,7 @@ public: su_info(unsigned uid = 0); ~su_info(); - void lock(); - void unlock(); + mutex_guard lock(); bool is_fresh(); void refresh(); diff --git a/native/jni/su/su_daemon.cpp b/native/jni/su/su_daemon.cpp index 1ce07393c..5debb5cd5 100644 --- a/native/jni/su/su_daemon.cpp +++ b/native/jni/su/su_daemon.cpp @@ -33,12 +33,8 @@ su_info::~su_info() { pthread_mutex_destroy(&_lock); } -void su_info::lock() { - pthread_mutex_lock(&_lock); -} - -void su_info::unlock() { - pthread_mutex_unlock(&_lock); +mutex_guard su_info::lock() { + return mutex_guard(_lock); } bool su_info::is_fresh() { @@ -96,10 +92,7 @@ static shared_ptr get_su_info(unsigned uid) { info = cached; } - info->lock(); - run_finally unlock([&] { - info->unlock(); - }); + auto g = info->lock(); if (info->access.policy == QUERY) { // Not cached, get data from database