From 14f4144a82558ec4da2d4962ef02b23f44967b6a Mon Sep 17 00:00:00 2001 From: perkj Date: Mon, 30 Nov 2015 22:15:45 -0800 Subject: Add helper KeepRefUntilDone. The callback keeps a reference to an object until the callback goes out of scope. Review URL: https://codereview.webrtc.org/1487493002 Cr-Commit-Position: refs/heads/master@{#10847} --- webrtc/base/keep_ref_until_done.h | 43 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 webrtc/base/keep_ref_until_done.h (limited to 'webrtc/base/keep_ref_until_done.h') diff --git a/webrtc/base/keep_ref_until_done.h b/webrtc/base/keep_ref_until_done.h new file mode 100644 index 0000000000..269e1c8657 --- /dev/null +++ b/webrtc/base/keep_ref_until_done.h @@ -0,0 +1,43 @@ +/* + * Copyright 2015 The WebRTC Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef WEBRTC_BASE_KEEP_REF_UNTIL_DONE_H_ +#define WEBRTC_BASE_KEEP_REF_UNTIL_DONE_H_ + +#include "webrtc/base/bind.h" +#include "webrtc/base/callback.h" +#include "webrtc/base/refcount.h" +#include "webrtc/base/scoped_ref_ptr.h" + +namespace rtc { + +namespace impl { +template +static inline void DoNothing(const scoped_refptr& object) {} +} // namespace impl + +// KeepRefUntilDone keeps a reference to |object| until the returned +// callback goes out of scope. If the returned callback is copied, the +// reference will be released when the last callback goes out of scope. +template +static inline Callback0 KeepRefUntilDone(ObjectT* object) { + return rtc::Bind(&impl::DoNothing, scoped_refptr(object)); +} + +template +static inline Callback0 KeepRefUntilDone( + const scoped_refptr& object) { + return rtc::Bind(&impl::DoNothing, object); +} + +} // namespace rtc + + +#endif // WEBRTC_BASE_KEEP_REF_UNTIL_DONE_H_ -- cgit v1.2.3