extern char** environ;
+std::mutex mtx;
+bool mountFlag = false;
+
static inline int usage(const std::string name)
{
std::cout << "Usage: " << name << " [Option]" << std::endl
}
static void mount_event_cb(void *user_data) {
- std::mutex *pMtx = (std::mutex*)user_data;
- pMtx->unlock();
+ std::unique_lock<std::mutex> lock(mtx);
+ std::condition_variable *pCond = (std::condition_variable*)user_data;
+ mountFlag = true;
+ pCond->notify_one();
}
static inline int wait_for_mount(const std::string name)
{
int ret;
- std::mutex mtx;
- mtx.lock();
+ std::unique_lock<std::mutex> lock(mtx);
+ std::condition_variable cond;
if (name == "internal") {
std::cout << "Wait for internal storage mount..." << std::endl;
- ret = ode_internal_encryption_set_mount_event_cb(mount_event_cb, &mtx);
+ ret = ode_internal_encryption_set_mount_event_cb(mount_event_cb, &cond);
} else if (name == "external") {
std::cout << "Wait for external storage mount..." << std::endl;
- ret = ode_external_encryption_set_mount_event_cb(mount_event_cb, &mtx);
+ ret = ode_external_encryption_set_mount_event_cb(mount_event_cb, &cond);
} else {
printSelectableStorage();
return -1;
return -1;
}
- mtx.lock();
+ cond.wait(lock, []{return mountFlag;});
std::cout << "Mount is completed"<< std::endl;
+ mountFlag = false;
return ret;
}