Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Unified Diff: src/platform/update_engine/subprocess.h

Issue 465067: Missed new files in last commit
Patch Set: Created 11 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/platform/update_engine/subprocess.h
diff --git a/src/platform/update_engine/subprocess.h b/src/platform/update_engine/subprocess.h
new file mode 100644
index 0000000000000000000000000000000000000000..92064a65aa5bb98f1e5634f1f7affe6a16de41eb
--- /dev/null
+++ b/src/platform/update_engine/subprocess.h
@@ -0,0 +1,79 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_SUBPROCESS_H__
+#define CHROMEOS_PLATFORM_UPDATE_ENGINE_SUBPROCESS_H__
+
+#include <map>
+#include <string>
+#include <vector>
+#include <glib.h>
+#include "chromeos/obsolete_logging.h"
+#include "base/basictypes.h"
+
+// The Subprocess class is a singleton. It's used to spawn off a subprocess
+// and get notified when the subprocess exits. The result of Exec() can
+// be saved and used to cancel the callback request. If you know you won't
+// call CancelExec(), you may safely lose the return value from Exec().
+
+namespace chromeos_update_engine {
+
+class Subprocess {
+ public:
+ static void Init() {
+ CHECK(!subprocess_singleton_);
+ subprocess_singleton_ = new Subprocess;
+ }
+
+ typedef void(*ExecCallback)(int return_code, void *p);
+
+ // Returns a tag > 0 on success.
+ uint32 Exec(const std::vector<std::string>& cmd,
+ ExecCallback callback,
+ void* p);
+
+ // Used to cancel the callback. The process will still run to completion.
+ void CancelExec(uint32 tag);
+
+ // Executes a command synchronously. Returns true on success.
+ static bool SynchronousExec(const std::vector<std::string>& cmd,
+ int* return_code);
+
+ // Gets the one instance
+ static Subprocess& Get() {
+ return *subprocess_singleton_;
+ }
+
+ // Returns true iff there is at least one subprocess we're waiting on.
+ bool SubprocessInFlight() {
+ for (std::map<int, SubprocessCallbackRecord>::iterator it =
+ callback_records_.begin();
+ it != callback_records_.end(); ++it) {
+ if (it->second.callback)
+ return true;
+ }
+ return false;
+ }
+ private:
+ // The global instance
+ static Subprocess* subprocess_singleton_;
+
+ // Callback for when any subprocess terminates. This calls the user
+ // requested callback.
+ static void GChildExitedCallback(GPid pid, gint status, gpointer data);
+
+ struct SubprocessCallbackRecord {
+ ExecCallback callback;
+ void* callback_data;
+ };
+
+ std::map<int, SubprocessCallbackRecord> callback_records_;
+
+ Subprocess() {}
+ DISALLOW_COPY_AND_ASSIGN(Subprocess);
+};
+
+} // namespace chromeos_update_engine
+
+#endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_SUBPROCESS_H__
« no previous file with comments | « src/platform/update_engine/set_bootable_flag_action_unittest.cc ('k') | src/platform/update_engine/subprocess.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698