blob: e0dd64fda8914389c620e101d9425c4439959b1b [file] [log] [blame]
// Copyright 2017 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.
#ifndef CHAPS_DBUS_SCOPED_BUS_H_
#define CHAPS_DBUS_SCOPED_BUS_H_
#include <base/memory/ref_counted.h>
#include <dbus/bus.h>
namespace chaps {
// After we have an ObjectProxy, there is a reference cycle between the
// Bus and the ObjectProxy. This can be resolved by shutting down the bus
// before we get rid of it. We may need to shut down the bus on another
// thread to satisfy threading restrictions.
class ScopedBus {
public:
ScopedBus();
// Substitute for a normal dbus::Bus constructor.
explicit ScopedBus(const dbus::Bus::Options& options);
// Move constructor.
ScopedBus(ScopedBus&& other);
virtual ~ScopedBus();
// Move assignment.
ScopedBus& operator=(ScopedBus&& other);
// ScopedBus should be a drop-in replacement for dbus::Bus so
// this overload is provided.
dbus::Bus* operator->() const { return bus_.get(); }
scoped_refptr<dbus::Bus> get() { return bus_; }
private:
scoped_refptr<dbus::Bus> bus_;
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
DISALLOW_COPY_AND_ASSIGN(ScopedBus);
};
} // namespace chaps
#endif // CHAPS_DBUS_SCOPED_BUS_H_