Call chromeos-setgoodkernel asynchronously.

Currently, the script may take about 40 seconds to run and it used to run
synchronously thus blocking the event loop and making update-engine unresponsive
on D-Bus. This CL makes the call asynchronous -- however, the update process
still waits for the call to complete before it starts.

Also, make sure Omaha pings don't try to go in parallel.

Also, fail postinstall action if we fail to spawn the postinstall script.

BUG=chromium-os:14954
TEST=ran AU in different scenarios

Change-Id: I9af84e30ef075838e6625d74f3e6b72577d8c386
Reviewed-on: http://gerrit.chromium.org/gerrit/449
Reviewed-by: Thieu Le <thieule@chromium.org>
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Darin Petkov <petkov@chromium.org>
diff --git a/postinstall_runner_action.cc b/postinstall_runner_action.cc
index 2c8b943..20989aa 100644
--- a/postinstall_runner_action.cc
+++ b/postinstall_runner_action.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
@@ -57,7 +57,9 @@
   vector<string> command;
   command.push_back(temp_rootfs_dir_ + kPostinstallScript);
   command.push_back(install_device);
-  Subprocess::Get().Exec(command, StaticCompletePostinstall, this);
+  if (!Subprocess::Get().Exec(command, StaticCompletePostinstall, this)) {
+    CompletePostinstall(1);
+  }
 }
 
 void PostinstallRunnerAction::CompletePostinstall(int return_code) {