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

Side by Side Diff: dbus/bus.h

Issue 7830009: Add Bus::ShutdownOnDBusThreadAndBlock() and remove bus::Shutdown() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 3 months 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | dbus/bus.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium 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 #ifndef DBUS_BUS_H_ 5 #ifndef DBUS_BUS_H_
6 #define DBUS_BUS_H_ 6 #define DBUS_BUS_H_
7 #pragma once 7 #pragma once
8 8
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
11 #include <string> 11 #include <string>
12 #include <dbus/dbus.h> 12 #include <dbus/dbus.h>
13 13
14 #include "base/callback.h" 14 #include "base/callback.h"
15 #include "base/memory/ref_counted.h" 15 #include "base/memory/ref_counted.h"
16 #include "base/memory/scoped_ptr.h" 16 #include "base/memory/scoped_ptr.h"
17 #include "base/synchronization/waitable_event.h"
17 #include "base/threading/platform_thread.h" 18 #include "base/threading/platform_thread.h"
18 #include "base/tracked_objects.h" 19 #include "base/tracked_objects.h"
19 20
20 class MessageLoop; 21 class MessageLoop;
21 22
22 namespace base { 23 namespace base {
23 class Thread; 24 class Thread;
24 } 25 }
25 26
26 namespace dbus { 27 namespace dbus {
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 // 219 //
219 // BLOCKING CALL. 220 // BLOCKING CALL.
220 virtual void ShutdownAndBlock(); 221 virtual void ShutdownAndBlock();
221 222
222 // Shuts down the bus in the D-Bus thread. |callback| will be called in 223 // Shuts down the bus in the D-Bus thread. |callback| will be called in
223 // the origin thread. 224 // the origin thread.
224 // 225 //
225 // Must be called in the origin thread. 226 // Must be called in the origin thread.
226 virtual void Shutdown(OnShutdownCallback callback); 227 virtual void Shutdown(OnShutdownCallback callback);
227 228
229 // Similar to ShutdownAndBlock(), but this function is used to
230 // synchronously shut down the bus that uses the D-Bus thread. This
231 // function is intended to be used at the very end of the browser
232 // shutdown, where it makes more sense to shut down the bus
233 // synchronously, than trying to make it asynchronous.
234 //
235 // BLOCKING CALL, but must be called in the origin thread.
236 virtual void ShutdownAndBlockWithDBusThread();
stevenjb 2011/09/01 17:53:44 Do we need to expose both ShutdownAndBlock and Shu
satorux1 2011/09/01 17:57:30 ShutdownAndBlock() is already used in wifi_data_pr
stevenjb 2011/09/01 18:19:33 OK. In that case I suggest we name this ShutdownOn
237
238 // Returns true if the shutdown has been completed.
239 bool shutdown_completed() { return shutdown_completed_; }
240
228 // 241 //
229 // The public functions below are not intended to be used in client 242 // The public functions below are not intended to be used in client
230 // code. These are used to implement ObjectProxy and ExportedObject. 243 // code. These are used to implement ObjectProxy and ExportedObject.
231 // 244 //
232 245
233 // Connects the bus to the dbus-daemon. 246 // Connects the bus to the dbus-daemon.
234 // Returns true on success, or the bus is already connected. 247 // Returns true on success, or the bus is already connected.
235 // 248 //
236 // BLOCKING CALL. 249 // BLOCKING CALL.
237 virtual bool Connect(); 250 virtual bool Connect();
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 protected: 390 protected:
378 // This is protected, so we can define sub classes. 391 // This is protected, so we can define sub classes.
379 virtual ~Bus(); 392 virtual ~Bus();
380 393
381 private: 394 private:
382 friend class base::RefCountedThreadSafe<Bus>; 395 friend class base::RefCountedThreadSafe<Bus>;
383 396
384 // Helper function used for Shutdown(). 397 // Helper function used for Shutdown().
385 void ShutdownInternal(OnShutdownCallback callback); 398 void ShutdownInternal(OnShutdownCallback callback);
386 399
400 // Helper function used for ShutdownAndBlockWithDBusThread().
401 void ShutdownAndBlockWithDBusThreadInternal();
402
387 // Processes the all incoming data to the connection, if any. 403 // Processes the all incoming data to the connection, if any.
388 // 404 //
389 // BLOCKING CALL. 405 // BLOCKING CALL.
390 void ProcessAllIncomingDataIfAny(); 406 void ProcessAllIncomingDataIfAny();
391 407
392 // Called when a watch object is added. Used to start monitoring the 408 // Called when a watch object is added. Used to start monitoring the
393 // file descriptor used for D-Bus communication. 409 // file descriptor used for D-Bus communication.
394 dbus_bool_t OnAddWatch(DBusWatch* raw_watch); 410 dbus_bool_t OnAddWatch(DBusWatch* raw_watch);
395 411
396 // Called when a watch object is removed. 412 // Called when a watch object is removed.
(...skipping 23 matching lines...) Expand all
420 static void OnToggleWatchThunk(DBusWatch* raw_watch, void* data); 436 static void OnToggleWatchThunk(DBusWatch* raw_watch, void* data);
421 static dbus_bool_t OnAddTimeoutThunk(DBusTimeout* raw_timeout, void* data); 437 static dbus_bool_t OnAddTimeoutThunk(DBusTimeout* raw_timeout, void* data);
422 static void OnRemoveTimeoutThunk(DBusTimeout* raw_timeout, void* data); 438 static void OnRemoveTimeoutThunk(DBusTimeout* raw_timeout, void* data);
423 static void OnToggleTimeoutThunk(DBusTimeout* raw_timeout, void* data); 439 static void OnToggleTimeoutThunk(DBusTimeout* raw_timeout, void* data);
424 static void OnDispatchStatusChangedThunk(DBusConnection* connection, 440 static void OnDispatchStatusChangedThunk(DBusConnection* connection,
425 DBusDispatchStatus status, 441 DBusDispatchStatus status,
426 void* data); 442 void* data);
427 const BusType bus_type_; 443 const BusType bus_type_;
428 const ConnectionType connection_type_; 444 const ConnectionType connection_type_;
429 base::Thread* dbus_thread_; 445 base::Thread* dbus_thread_;
446 base::WaitableEvent on_shutdown_;
430 DBusConnection* connection_; 447 DBusConnection* connection_;
431 448
432 MessageLoop* origin_loop_; 449 MessageLoop* origin_loop_;
433 base::PlatformThreadId origin_thread_id_; 450 base::PlatformThreadId origin_thread_id_;
434 base::PlatformThreadId dbus_thread_id_; 451 base::PlatformThreadId dbus_thread_id_;
435 452
436 std::set<std::string> owned_service_names_; 453 std::set<std::string> owned_service_names_;
437 // The following sets are used to check if rules/object_paths/filters 454 // The following sets are used to check if rules/object_paths/filters
438 // are properly cleaned up before destruction of the bus object. 455 // are properly cleaned up before destruction of the bus object.
439 std::set<std::string> match_rules_added_; 456 std::set<std::string> match_rules_added_;
440 std::set<std::string> registered_object_paths_; 457 std::set<std::string> registered_object_paths_;
441 std::set<DBusHandleMessageFunction> filter_functions_added_; 458 std::set<DBusHandleMessageFunction> filter_functions_added_;
442 459
443 // ObjectProxyTable is used to hold the object proxies created by the 460 // ObjectProxyTable is used to hold the object proxies created by the
444 // bus object. Key is a concatenated string of service name + object path, 461 // bus object. Key is a concatenated string of service name + object path,
445 // like "org.chromium.TestService/org/chromium/TestObject". 462 // like "org.chromium.TestService/org/chromium/TestObject".
446 typedef std::map<std::string, 463 typedef std::map<std::string,
447 scoped_refptr<dbus::ObjectProxy> > ObjectProxyTable; 464 scoped_refptr<dbus::ObjectProxy> > ObjectProxyTable;
448 ObjectProxyTable object_proxy_table_; 465 ObjectProxyTable object_proxy_table_;
449 466
450 // ExportedObjectTable is used to hold the exported objects created by 467 // ExportedObjectTable is used to hold the exported objects created by
451 // the bus object. Key is a concatenated string of service name + 468 // the bus object. Key is a concatenated string of service name +
452 // object path, like "org.chromium.TestService/org/chromium/TestObject". 469 // object path, like "org.chromium.TestService/org/chromium/TestObject".
453 typedef std::map<std::string, 470 typedef std::map<std::string,
454 scoped_refptr<dbus::ExportedObject> > ExportedObjectTable; 471 scoped_refptr<dbus::ExportedObject> > ExportedObjectTable;
455 ExportedObjectTable exported_object_table_; 472 ExportedObjectTable exported_object_table_;
456 473
457 bool async_operations_set_up_; 474 bool async_operations_set_up_;
475 bool shutdown_completed_;
458 476
459 // Counters to make sure that OnAddWatch()/OnRemoveWatch() and 477 // Counters to make sure that OnAddWatch()/OnRemoveWatch() and
460 // OnAddTimeout()/OnRemoveTimeou() are balanced. 478 // OnAddTimeout()/OnRemoveTimeou() are balanced.
461 int num_pending_watches_; 479 int num_pending_watches_;
462 int num_pending_timeouts_; 480 int num_pending_timeouts_;
463 481
464 DISALLOW_COPY_AND_ASSIGN(Bus); 482 DISALLOW_COPY_AND_ASSIGN(Bus);
465 }; 483 };
466 484
467 } // namespace dbus 485 } // namespace dbus
468 486
469 #endif // DBUS_BUS_H_ 487 #endif // DBUS_BUS_H_
OLDNEW
« no previous file with comments | « no previous file | dbus/bus.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698