Merge "Switch Checkpoint health sleep time to ms." am: 32a8a47b07
am: e6db7e0a23

Change-Id: If71daebf5bd2d91f5dfbadee4c7707c10b667648
diff --git a/Checkpoint.cpp b/Checkpoint.cpp
index 3392be5..e060230 100644
--- a/Checkpoint.cpp
+++ b/Checkpoint.cpp
@@ -261,8 +261,9 @@
 }
 
 namespace {
-const std::string kSleepTimeProp = "ro.sys.cp_usleeptime";
-const uint32_t usleeptime_default = 1000000;  // 1 s
+const std::string kSleepTimeProp = "ro.sys.cp_msleeptime";
+const uint32_t msleeptime_default = 1000;  // 1 s
+const uint32_t max_msleeptime = 3600000;   // 1 h
 
 const std::string kMinFreeBytesProp = "ro.sys.cp_min_free_bytes";
 const uint64_t min_free_bytes_default = 100 * (1 << 20);  // 100 MiB
@@ -273,11 +274,15 @@
 static void cp_healthDaemon(std::string mnt_pnt, std::string blk_device, bool is_fs_cp) {
     struct statvfs data;
     uint64_t free_bytes = 0;
-    uint32_t usleeptime = GetUintProperty(kSleepTimeProp, usleeptime_default, (uint32_t)-1);
+    uint32_t msleeptime = GetUintProperty(kSleepTimeProp, msleeptime_default, max_msleeptime);
     uint64_t min_free_bytes =
         GetUintProperty(kMinFreeBytesProp, min_free_bytes_default, (uint64_t)-1);
     bool commit_on_full = GetBoolProperty(kCommitOnFullProp, commit_on_full_default);
 
+    struct timespec req;
+    req.tv_sec = msleeptime / 1000;
+    msleeptime %= 1000;
+    req.tv_nsec = msleeptime * 1000000;
     while (isCheckpointing) {
         if (is_fs_cp) {
             statvfs(mnt_pnt.c_str(), &data);
@@ -302,7 +307,7 @@
                 break;
             }
         }
-        usleep(usleeptime);
+        nanosleep(&req, NULL);
     }
 }