| Index: main.cc
|
| diff --git a/main.cc b/main.cc
|
| index f449fa401ece16536a0f9377eae0fe6ace3daa5a..251b10a7b72f38517b079be6d06984f55d0ad149 100644
|
| --- a/main.cc
|
| +++ b/main.cc
|
| @@ -9,6 +9,7 @@
|
| #include <gflags/gflags.h>
|
| #include <glib.h>
|
|
|
| +#include "base/at_exit.h"
|
| #include "base/command_line.h"
|
| #include "base/logging.h"
|
| #include "base/string_util.h"
|
| @@ -45,16 +46,29 @@ gboolean UpdateBootFlags(void* arg) {
|
|
|
| namespace {
|
|
|
| +const int kTimeoutOnce = 7 * 60; // at 7 minutes
|
| +const int kTimeoutPeriodic = 45 * 60; // every 45 minutes
|
| +const int kTimeoutFuzz = 10 * 60; // +/- 5 minutes
|
| +
|
| +// Schedules an update check |seconds| from now, while adding some fuzz.
|
| +void ScheduleUpdateCheck(int seconds,
|
| + GSourceFunc update_function,
|
| + UpdateAttempter* update_attempter) {
|
| + seconds = utils::FuzzInt(seconds, kTimeoutFuzz);
|
| + g_timeout_add_seconds(seconds, update_function, update_attempter);
|
| +}
|
| +
|
| gboolean UpdateOnce(void* arg) {
|
| UpdateAttempter* update_attempter = reinterpret_cast<UpdateAttempter*>(arg);
|
| update_attempter->Update("", "");
|
| - return FALSE;
|
| + return FALSE; // Don't run again.
|
| }
|
|
|
| gboolean UpdatePeriodically(void* arg) {
|
| UpdateAttempter* update_attempter = reinterpret_cast<UpdateAttempter*>(arg);
|
| update_attempter->Update("", "");
|
| - return TRUE;
|
| + ScheduleUpdateCheck(kTimeoutPeriodic, &UpdatePeriodically, update_attempter);
|
| + return FALSE; // Don't run again.
|
| }
|
|
|
| void SchedulePeriodicUpdateChecks(UpdateAttempter* update_attempter) {
|
| @@ -62,16 +76,13 @@ void SchedulePeriodicUpdateChecks(UpdateAttempter* update_attempter) {
|
| LOG(WARNING) << "Non-official build: periodic update checks disabled.";
|
| return;
|
| }
|
| -
|
| if (utils::IsRemovableDevice(utils::RootDevice(utils::BootDevice()))) {
|
| LOG(WARNING) << "Removable device boot: periodic update checks disabled.";
|
| return;
|
| }
|
| -
|
| - // Kick off periodic updating. First, update after 2 minutes. Also, update
|
| - // every 30 minutes.
|
| - g_timeout_add_seconds(2 * 60, &UpdateOnce, update_attempter);
|
| - g_timeout_add_seconds(30 * 60, &UpdatePeriodically, update_attempter);
|
| + // Kick off periodic updating.
|
| + ScheduleUpdateCheck(kTimeoutOnce, &UpdateOnce, update_attempter);
|
| + ScheduleUpdateCheck(kTimeoutPeriodic, &UpdatePeriodically, update_attempter);
|
| }
|
|
|
| void SetupDbusService(UpdateEngineService* service) {
|
| @@ -118,6 +129,7 @@ int main(int argc, char** argv) {
|
| ::g_type_init();
|
| g_thread_init(NULL);
|
| dbus_g_thread_init();
|
| + base::AtExitManager exit_manager; // Required for base/rand_util.h.
|
| chromeos_update_engine::Subprocess::Init();
|
| google::ParseCommandLineFlags(&argc, &argv, true);
|
| CommandLine::Init(argc, argv);
|
|
|