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

Side by Side 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_SUBPROCESS_H__
6 #define CHROMEOS_PLATFORM_UPDATE_ENGINE_SUBPROCESS_H__
7
8 #include <map>
9 #include <string>
10 #include <vector>
11 #include <glib.h>
12 #include "chromeos/obsolete_logging.h"
13 #include "base/basictypes.h"
14
15 // The Subprocess class is a singleton. It's used to spawn off a subprocess
16 // and get notified when the subprocess exits. The result of Exec() can
17 // be saved and used to cancel the callback request. If you know you won't
18 // call CancelExec(), you may safely lose the return value from Exec().
19
20 namespace chromeos_update_engine {
21
22 class Subprocess {
23 public:
24 static void Init() {
25 CHECK(!subprocess_singleton_);
26 subprocess_singleton_ = new Subprocess;
27 }
28
29 typedef void(*ExecCallback)(int return_code, void *p);
30
31 // Returns a tag > 0 on success.
32 uint32 Exec(const std::vector<std::string>& cmd,
33 ExecCallback callback,
34 void* p);
35
36 // Used to cancel the callback. The process will still run to completion.
37 void CancelExec(uint32 tag);
38
39 // Executes a command synchronously. Returns true on success.
40 static bool SynchronousExec(const std::vector<std::string>& cmd,
41 int* return_code);
42
43 // Gets the one instance
44 static Subprocess& Get() {
45 return *subprocess_singleton_;
46 }
47
48 // Returns true iff there is at least one subprocess we're waiting on.
49 bool SubprocessInFlight() {
50 for (std::map<int, SubprocessCallbackRecord>::iterator it =
51 callback_records_.begin();
52 it != callback_records_.end(); ++it) {
53 if (it->second.callback)
54 return true;
55 }
56 return false;
57 }
58 private:
59 // The global instance
60 static Subprocess* subprocess_singleton_;
61
62 // Callback for when any subprocess terminates. This calls the user
63 // requested callback.
64 static void GChildExitedCallback(GPid pid, gint status, gpointer data);
65
66 struct SubprocessCallbackRecord {
67 ExecCallback callback;
68 void* callback_data;
69 };
70
71 std::map<int, SubprocessCallbackRecord> callback_records_;
72
73 Subprocess() {}
74 DISALLOW_COPY_AND_ASSIGN(Subprocess);
75 };
76
77 } // namespace chromeos_update_engine
78
79 #endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_SUBPROCESS_H__
OLDNEW
« 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