OLD | NEW |
1 // Copyright (c) 2009-2010 The Chromium OS Authors. All rights reserved. | 1 // Copyright (c) 2009-2010 The Chromium OS Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "login_manager/session_manager_service.h" | 5 #include "login_manager/session_manager_service.h" |
6 | 6 |
7 #include <dbus/dbus-glib-lowlevel.h> | 7 #include <dbus/dbus-glib-lowlevel.h> |
8 #include <errno.h> | 8 #include <errno.h> |
9 #include <glib.h> | 9 #include <glib.h> |
10 #include <grp.h> | 10 #include <grp.h> |
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 if (session_started_) { | 321 if (session_started_) { |
322 DLOG(INFO) << "emitting D-Bus signal SessionStateChanged:stopped"; | 322 DLOG(INFO) << "emitting D-Bus signal SessionStateChanged:stopped"; |
323 if (signals_[kSignalSessionStateChanged]) { | 323 if (signals_[kSignalSessionStateChanged]) { |
324 g_signal_emit(session_manager_, | 324 g_signal_emit(session_manager_, |
325 signals_[kSignalSessionStateChanged], | 325 signals_[kSignalSessionStateChanged], |
326 0, "stopped", current_user_.c_str()); | 326 0, "stopped", current_user_.c_str()); |
327 } | 327 } |
328 } | 328 } |
329 | 329 |
330 // Even if we haven't gotten around to processing a persist task. | 330 // Even if we haven't gotten around to processing a persist task. |
331 store_->Persist(); | 331 base::WaitableEvent event(true, false); |
| 332 io_thread_.message_loop()->PostTask( |
| 333 FROM_HERE, NewRunnableMethod(this, |
| 334 &SessionManagerService::PersistStoreSync, |
| 335 &event)); |
| 336 event.Wait(); |
332 io_thread_.Stop(); | 337 io_thread_.Stop(); |
333 message_loop_->PostTask(FROM_HERE, new MessageLoop::QuitTask()); | 338 message_loop_->PostTask(FROM_HERE, new MessageLoop::QuitTask()); |
334 LOG(INFO) << "SessionManagerService quitting run loop"; | 339 LOG(INFO) << "SessionManagerService quitting run loop"; |
335 return true; | 340 return true; |
336 } | 341 } |
337 | 342 |
338 void SessionManagerService::RunChildren() { | 343 void SessionManagerService::RunChildren() { |
339 bootstat_log("chrome-exec"); | 344 bootstat_log("chrome-exec"); |
340 for (size_t i_child = 0; i_child < child_jobs_.size(); ++i_child) { | 345 for (size_t i_child = 0; i_child < child_jobs_.size(); ++i_child) { |
341 ChildJobInterface* child_job = child_jobs_[i_child]; | 346 ChildJobInterface* child_job = child_jobs_[i_child]; |
(...skipping 560 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
902 | 907 |
903 void SessionManagerService::PersistWhitelist() { | 908 void SessionManagerService::PersistWhitelist() { |
904 LOG(INFO) << "Persisting Whitelist to disk."; | 909 LOG(INFO) << "Persisting Whitelist to disk."; |
905 bool what_happened = store_->Persist(); | 910 bool what_happened = store_->Persist(); |
906 message_loop_->PostTask( | 911 message_loop_->PostTask( |
907 FROM_HERE, NewRunnableMethod(this, &SessionManagerService::SendSignal, | 912 FROM_HERE, NewRunnableMethod(this, &SessionManagerService::SendSignal, |
908 chromium::kWhitelistChangeCompleteSignal, | 913 chromium::kWhitelistChangeCompleteSignal, |
909 what_happened)); | 914 what_happened)); |
910 } | 915 } |
911 | 916 |
| 917 void SessionManagerService::PersistStoreSync(base::WaitableEvent* event) { |
| 918 store_->Persist(); |
| 919 LOG(INFO) << "Persisted Store to disk."; |
| 920 event->Signal(); |
| 921 } |
| 922 |
912 void SessionManagerService::PersistStore() { | 923 void SessionManagerService::PersistStore() { |
913 LOG(INFO) << "Persisting Store to disk."; | 924 LOG(INFO) << "Persisting Store to disk."; |
914 bool what_happened = store_->Persist(); | 925 bool what_happened = store_->Persist(); |
915 message_loop_->PostTask( | 926 message_loop_->PostTask( |
916 FROM_HERE, NewRunnableMethod(this, &SessionManagerService::SendSignal, | 927 FROM_HERE, NewRunnableMethod(this, &SessionManagerService::SendSignal, |
917 chromium::kPropertyChangeCompleteSignal, | 928 chromium::kPropertyChangeCompleteSignal, |
918 what_happened)); | 929 what_happened)); |
919 } | 930 } |
920 | 931 |
921 // static | 932 // static |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1231 arg_list.push_back(args[i_arg]); | 1242 arg_list.push_back(args[i_arg]); |
1232 } | 1243 } |
1233 } | 1244 } |
1234 if (arg_list.size()) { | 1245 if (arg_list.size()) { |
1235 arg_lists.push_back(arg_list); | 1246 arg_lists.push_back(arg_list); |
1236 } | 1247 } |
1237 return arg_lists; | 1248 return arg_lists; |
1238 } | 1249 } |
1239 | 1250 |
1240 } // namespace login_manager | 1251 } // namespace login_manager |
OLD | NEW |