diff --git a/update_attempter.cc b/update_attempter.cc
index e49a551..c9ee712 100644
--- a/update_attempter.cc
+++ b/update_attempter.cc
@@ -248,7 +248,9 @@
               postinstall_runner_action.get());
 
   SetStatusAndNotify(UPDATE_STATUS_CHECKING_FOR_UPDATE);
-  processor_->StartProcessing();
+
+  // Start the processing asynchronously to unblock the event loop.
+  g_idle_add(&StaticStartProcessing, this);
 }
 
 void UpdateAttempter::CheckForUpdate(const std::string& app_version,
@@ -527,6 +529,11 @@
   return reinterpret_cast<UpdateAttempter*>(data)->ManagePriorityCallback();
 }
 
+gboolean UpdateAttempter::StaticStartProcessing(gpointer data) {
+  reinterpret_cast<UpdateAttempter*>(data)->processor_->StartProcessing();
+  return FALSE;  // Don't call this callback again.
+}
+
 bool UpdateAttempter::ManagePriorityCallback() {
   SetPriority(utils::kProcessPriorityNormal);
   manage_priority_source_ = NULL;
diff --git a/update_attempter.h b/update_attempter.h
index 0afe7f6..e41cab9 100644
--- a/update_attempter.h
+++ b/update_attempter.h
@@ -158,6 +158,9 @@
   static gboolean StaticManagePriorityCallback(gpointer data);
   bool ManagePriorityCallback();
 
+  // Callback to start the action processor.
+  static gboolean StaticStartProcessing(gpointer data);
+
   // Checks if a full update is needed and forces it by updating the Omaha
   // request params.
   void DisableDeltaUpdateIfNeeded();
diff --git a/update_attempter_unittest.cc b/update_attempter_unittest.cc
index 76068fd..73addb5 100644
--- a/update_attempter_unittest.cc
+++ b/update_attempter_unittest.cc
@@ -39,7 +39,7 @@
 
 class UpdateAttempterTest : public ::testing::Test {
  protected:
-  UpdateAttempterTest() : attempter_(&dbus_) {}
+  UpdateAttempterTest() : attempter_(&dbus_), loop_(NULL) {}
   virtual void SetUp() {
     EXPECT_EQ(NULL, attempter_.dbus_service_);
     EXPECT_EQ(NULL, attempter_.prefs_);
@@ -60,10 +60,16 @@
     attempter_.prefs_ = &prefs_;
   }
 
+  void UpdateTestStart();
+  void UpdateTestVerify();
+  static gboolean StaticUpdateTestStart(gpointer data);
+  static gboolean StaticUpdateTestVerify(gpointer data);
+
   MockDbusGlib dbus_;
   UpdateAttempterUnderTest attempter_;
   ActionProcessorMock* processor_;
   NiceMock<PrefsMock> prefs_;
+  GMainLoop* loop_;
 };
 
 TEST_F(UpdateAttempterTest, ActionCompletedDownloadTest) {
@@ -227,22 +233,35 @@
                UpdateStatusToString(static_cast<UpdateStatus>(-1)));
 }
 
-TEST_F(UpdateAttempterTest, UpdateTest) {
+gboolean UpdateAttempterTest::StaticUpdateTestStart(gpointer data) {
+  reinterpret_cast<UpdateAttempterTest*>(data)->UpdateTestStart();
+  return FALSE;
+}
+
+gboolean UpdateAttempterTest::StaticUpdateTestVerify(gpointer data) {
+  reinterpret_cast<UpdateAttempterTest*>(data)->UpdateTestVerify();
+  return FALSE;
+}
+
+namespace {
+const string kActionTypes[] = {
+  OmahaRequestAction::StaticType(),
+  OmahaResponseHandlerAction::StaticType(),
+  FilesystemCopierAction::StaticType(),
+  FilesystemCopierAction::StaticType(),
+  OmahaRequestAction::StaticType(),
+  DownloadAction::StaticType(),
+  OmahaRequestAction::StaticType(),
+  FilesystemCopierAction::StaticType(),
+  FilesystemCopierAction::StaticType(),
+  PostinstallRunnerAction::StaticType(),
+  OmahaRequestAction::StaticType()
+};
+}  // namespace {}
+
+void UpdateAttempterTest::UpdateTestStart() {
   attempter_.set_http_response_code(200);
   InSequence s;
-  const string kActionTypes[] = {
-    OmahaRequestAction::StaticType(),
-    OmahaResponseHandlerAction::StaticType(),
-    FilesystemCopierAction::StaticType(),
-    FilesystemCopierAction::StaticType(),
-    OmahaRequestAction::StaticType(),
-    DownloadAction::StaticType(),
-    OmahaRequestAction::StaticType(),
-    FilesystemCopierAction::StaticType(),
-    FilesystemCopierAction::StaticType(),
-    PostinstallRunnerAction::StaticType(),
-    OmahaRequestAction::StaticType()
-  };
   for (size_t i = 0; i < arraysize(kActionTypes); ++i) {
     EXPECT_CALL(*processor_,
                 EnqueueAction(Property(&AbstractAction::Type,
@@ -251,7 +270,10 @@
   EXPECT_CALL(*processor_, StartProcessing()).Times(1);
 
   attempter_.Update("", "", false);
+  g_idle_add(&StaticUpdateTestVerify, this);
+}
 
+void UpdateAttempterTest::UpdateTestVerify() {
   EXPECT_EQ(0, attempter_.http_response_code());
   EXPECT_EQ(&attempter_, processor_->delegate());
   EXPECT_EQ(arraysize(kActionTypes), attempter_.actions_.size());
@@ -265,6 +287,15 @@
   ASSERT_TRUE(download_action != NULL);
   EXPECT_EQ(&attempter_, download_action->delegate());
   EXPECT_EQ(UPDATE_STATUS_CHECKING_FOR_UPDATE, attempter_.status());
+  g_main_loop_quit(loop_);
+}
+
+TEST_F(UpdateAttempterTest, UpdateTest) {
+  loop_ = g_main_loop_new(g_main_context_default(), FALSE);
+  g_idle_add(&StaticUpdateTestStart, this);
+  g_main_loop_run(loop_);
+  g_main_loop_unref(loop_);
+  loop_ = NULL;
 }
 
 }  // namespace chromeos_update_engine
