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

Side by Side Diff: mojo/public/cpp/system/core.h

Issue 336313003: mojo: Don't leak handles when assigning to ScopedHandles. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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 | mojo/public/cpp/system/tests/core_unittest.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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 MOJO_PUBLIC_CPP_SYSTEM_CORE_H_ 5 #ifndef MOJO_PUBLIC_CPP_SYSTEM_CORE_H_
6 #define MOJO_PUBLIC_CPP_SYSTEM_CORE_H_ 6 #define MOJO_PUBLIC_CPP_SYSTEM_CORE_H_
7 7
8 #include <assert.h> 8 #include <assert.h>
9 #include <stddef.h> 9 #include <stddef.h>
10 10
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 ~ScopedHandleBase() { CloseIfNecessary(); } 100 ~ScopedHandleBase() { CloseIfNecessary(); }
101 101
102 template <class CompatibleHandleType> 102 template <class CompatibleHandleType>
103 explicit ScopedHandleBase(ScopedHandleBase<CompatibleHandleType> other) 103 explicit ScopedHandleBase(ScopedHandleBase<CompatibleHandleType> other)
104 : handle_(other.release()) { 104 : handle_(other.release()) {
105 } 105 }
106 106
107 // Move-only constructor and operator=. 107 // Move-only constructor and operator=.
108 ScopedHandleBase(RValue other) : handle_(other.object->release()) {} 108 ScopedHandleBase(RValue other) : handle_(other.object->release()) {}
109 ScopedHandleBase& operator=(RValue other) { 109 ScopedHandleBase& operator=(RValue other) {
110 if (handle_.is_valid() && handle_.value() != other.object->get().value())
viettrungluu 2014/06/17 22:58:25 Since a handle should only be in a single ScopedHa
Elliot Glaysher 2014/06/17 23:08:28 Switched to if (other.object != this). Didn't add
111 CloseIfNecessary();
110 handle_ = other.object->release(); 112 handle_ = other.object->release();
111 return *this; 113 return *this;
112 } 114 }
113 115
114 const HandleType& get() const { return handle_; } 116 const HandleType& get() const { return handle_; }
115 117
116 template <typename PassedHandleType> 118 template <typename PassedHandleType>
117 static ScopedHandleBase<HandleType> From( 119 static ScopedHandleBase<HandleType> From(
118 ScopedHandleBase<PassedHandleType> other) { 120 ScopedHandleBase<PassedHandleType> other) {
119 MOJO_COMPILE_ASSERT( 121 MOJO_COMPILE_ASSERT(
(...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 CreateSharedBuffer(&options, num_bytes, &handle); 544 CreateSharedBuffer(&options, num_bytes, &handle);
543 assert(result == MOJO_RESULT_OK); 545 assert(result == MOJO_RESULT_OK);
544 } 546 }
545 547
546 inline SharedBuffer::~SharedBuffer() { 548 inline SharedBuffer::~SharedBuffer() {
547 } 549 }
548 550
549 } // namespace mojo 551 } // namespace mojo
550 552
551 #endif // MOJO_PUBLIC_CPP_SYSTEM_CORE_H_ 553 #endif // MOJO_PUBLIC_CPP_SYSTEM_CORE_H_
OLDNEW
« no previous file with comments | « no previous file | mojo/public/cpp/system/tests/core_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698