Index: mojo/edk/system/handle_table.cc |
diff --git a/mojo/edk/system/handle_table.cc b/mojo/edk/system/handle_table.cc |
index 15ff5d8f8eebfa415778d4291d342776e59e2dd5..19d076313cbe712000e051e42a9e580b56eff720 100644 |
--- a/mojo/edk/system/handle_table.cc |
+++ b/mojo/edk/system/handle_table.cc |
@@ -5,6 +5,7 @@ |
#include "mojo/edk/system/handle_table.h" |
#include <limits> |
+#include <utility> |
#include "base/logging.h" |
#include "mojo/edk/system/configuration.h" |
@@ -16,9 +17,8 @@ namespace system { |
HandleTable::Entry::Entry() : busy(false) { |
} |
-HandleTable::Entry::Entry(const scoped_refptr<Dispatcher>& dispatcher) |
- : dispatcher(dispatcher), busy(false) { |
-} |
+HandleTable::Entry::Entry(RefPtr<Dispatcher>&& dispatcher) |
+ : dispatcher(std::move(dispatcher)), busy(false) {} |
HandleTable::Entry::~Entry() { |
DCHECK(!busy); |
@@ -41,9 +41,8 @@ Dispatcher* HandleTable::GetDispatcher(MojoHandle handle) { |
return it->second.dispatcher.get(); |
} |
-MojoResult HandleTable::GetAndRemoveDispatcher( |
- MojoHandle handle, |
- scoped_refptr<Dispatcher>* dispatcher) { |
+MojoResult HandleTable::GetAndRemoveDispatcher(MojoHandle handle, |
+ RefPtr<Dispatcher>* dispatcher) { |
DCHECK_NE(handle, MOJO_HANDLE_INVALID); |
DCHECK(dispatcher); |
@@ -52,27 +51,27 @@ MojoResult HandleTable::GetAndRemoveDispatcher( |
return MOJO_RESULT_INVALID_ARGUMENT; |
if (it->second.busy) |
return MOJO_RESULT_BUSY; |
- *dispatcher = it->second.dispatcher; |
+ *dispatcher = std::move(it->second.dispatcher); |
handle_to_entry_map_.erase(it); |
return MOJO_RESULT_OK; |
} |
-MojoHandle HandleTable::AddDispatcher( |
- const scoped_refptr<Dispatcher>& dispatcher) { |
+MojoHandle HandleTable::AddDispatcher(Dispatcher* dispatcher) { |
if (handle_to_entry_map_.size() >= GetConfiguration().max_handle_table_size) |
return MOJO_HANDLE_INVALID; |
- return AddDispatcherNoSizeCheck(dispatcher); |
+ return AddDispatcherNoSizeCheck(RefPtr<Dispatcher>(dispatcher)); |
} |
std::pair<MojoHandle, MojoHandle> HandleTable::AddDispatcherPair( |
- const scoped_refptr<Dispatcher>& dispatcher0, |
- const scoped_refptr<Dispatcher>& dispatcher1) { |
+ Dispatcher* dispatcher0, |
+ Dispatcher* dispatcher1) { |
if (handle_to_entry_map_.size() + 1 >= |
GetConfiguration().max_handle_table_size) |
return std::make_pair(MOJO_HANDLE_INVALID, MOJO_HANDLE_INVALID); |
- return std::make_pair(AddDispatcherNoSizeCheck(dispatcher0), |
- AddDispatcherNoSizeCheck(dispatcher1)); |
+ return std::make_pair( |
+ AddDispatcherNoSizeCheck(RefPtr<Dispatcher>(dispatcher0)), |
+ AddDispatcherNoSizeCheck(RefPtr<Dispatcher>(dispatcher1))); |
} |
bool HandleTable::AddDispatcherVector(const DispatcherVector& dispatchers, |
@@ -92,7 +91,7 @@ bool HandleTable::AddDispatcherVector(const DispatcherVector& dispatchers, |
for (size_t i = 0; i < dispatchers.size(); i++) { |
if (dispatchers[i]) { |
- handles[i] = AddDispatcherNoSizeCheck(dispatchers[i]); |
+ handles[i] = AddDispatcherNoSizeCheck(dispatchers[i].Clone()); |
} else { |
LOG(WARNING) << "Invalid dispatcher at index " << i; |
handles[i] = MOJO_HANDLE_INVALID; |
@@ -187,7 +186,7 @@ MojoResult HandleTable::MarkBusyAndStartTransport( |
} |
MojoHandle HandleTable::AddDispatcherNoSizeCheck( |
- const scoped_refptr<Dispatcher>& dispatcher) { |
+ RefPtr<Dispatcher>&& dispatcher) { |
DCHECK(dispatcher); |
DCHECK_LT(handle_to_entry_map_.size(), |
GetConfiguration().max_handle_table_size); |
@@ -203,7 +202,7 @@ MojoHandle HandleTable::AddDispatcherNoSizeCheck( |
} |
MojoHandle new_handle = next_handle_; |
- handle_to_entry_map_[new_handle] = Entry(dispatcher); |
+ handle_to_entry_map_[new_handle] = Entry(std::move(dispatcher)); |
next_handle_++; |
if (next_handle_ == MOJO_HANDLE_INVALID) |