Index: mojo/edk/system/handle_table.cc |
diff --git a/mojo/edk/system/handle_table.cc b/mojo/edk/system/handle_table.cc |
index 9c0123069410aff01445caa3c933be15c2380071..05d526039696804dcf3dbcaf8585c6a4395d24b7 100644 |
--- a/mojo/edk/system/handle_table.cc |
+++ b/mojo/edk/system/handle_table.cc |
@@ -4,9 +4,10 @@ |
#include "mojo/edk/system/handle_table.h" |
+#include <limits> |
#include "base/logging.h" |
#include "base/macros.h" |
-#include "mojo/edk/system/constants.h" |
+#include "mojo/edk/system/configuration.h" |
#include "mojo/edk/system/dispatcher.h" |
namespace mojo { |
@@ -59,7 +60,7 @@ MojoResult HandleTable::GetAndRemoveDispatcher( |
MojoHandle HandleTable::AddDispatcher( |
const scoped_refptr<Dispatcher>& dispatcher) { |
- if (handle_to_entry_map_.size() >= kMaxHandleTableSize) |
+ if (handle_to_entry_map_.size() >= GetConfiguration().max_handle_table_size) |
return MOJO_HANDLE_INVALID; |
return AddDispatcherNoSizeCheck(dispatcher); |
} |
@@ -67,7 +68,8 @@ MojoHandle HandleTable::AddDispatcher( |
std::pair<MojoHandle, MojoHandle> HandleTable::AddDispatcherPair( |
const scoped_refptr<Dispatcher>& dispatcher0, |
const scoped_refptr<Dispatcher>& dispatcher1) { |
- if (handle_to_entry_map_.size() + 1 >= kMaxHandleTableSize) |
+ 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)); |
@@ -75,17 +77,17 @@ std::pair<MojoHandle, MojoHandle> HandleTable::AddDispatcherPair( |
bool HandleTable::AddDispatcherVector(const DispatcherVector& dispatchers, |
MojoHandle* handles) { |
- DCHECK_LE(dispatchers.size(), kMaxMessageNumHandles); |
+ size_t max_message_num_handles = GetConfiguration().max_message_num_handles; |
+ size_t max_handle_table_size = GetConfiguration().max_handle_table_size; |
+ |
+ DCHECK_LE(dispatchers.size(), max_message_num_handles); |
DCHECK(handles); |
- // TODO(vtl): |std::numeric_limits<size_t>::max()| isn't a compile-time |
- // expression in C++03. |
- static_assert( |
- static_cast<uint64_t>(kMaxHandleTableSize) + kMaxMessageNumHandles < |
- (sizeof(size_t) == 8 ? kuint64max |
- : static_cast<uint64_t>(kuint32max)), |
- "Addition may overflow"); |
- |
- if (handle_to_entry_map_.size() + dispatchers.size() > kMaxHandleTableSize) |
+ DCHECK_LT( |
+ static_cast<uint64_t>(max_handle_table_size) + max_message_num_handles, |
+ std::numeric_limits<size_t>::max()) |
+ << "Addition may overflow"; |
+ |
+ if (handle_to_entry_map_.size() + dispatchers.size() > max_handle_table_size) |
return false; |
for (size_t i = 0; i < dispatchers.size(); i++) { |
@@ -106,7 +108,7 @@ MojoResult HandleTable::MarkBusyAndStartTransport( |
std::vector<DispatcherTransport>* transports) { |
DCHECK_NE(disallowed_handle, MOJO_HANDLE_INVALID); |
DCHECK(handles); |
- DCHECK_LE(num_handles, kMaxMessageNumHandles); |
+ DCHECK_LE(num_handles, GetConfiguration().max_message_num_handles); |
DCHECK(transports); |
DCHECK_EQ(transports->size(), num_handles); |
@@ -187,7 +189,8 @@ MojoResult HandleTable::MarkBusyAndStartTransport( |
MojoHandle HandleTable::AddDispatcherNoSizeCheck( |
const scoped_refptr<Dispatcher>& dispatcher) { |
DCHECK(dispatcher.get()); |
- DCHECK_LT(handle_to_entry_map_.size(), kMaxHandleTableSize); |
+ DCHECK_LT(handle_to_entry_map_.size(), |
+ GetConfiguration().max_handle_table_size); |
DCHECK_NE(next_handle_, MOJO_HANDLE_INVALID); |
// TODO(vtl): Maybe we want to do something different/smarter. (Or maybe try |
@@ -212,7 +215,7 @@ MojoHandle HandleTable::AddDispatcherNoSizeCheck( |
void HandleTable::RemoveBusyHandles(const MojoHandle* handles, |
uint32_t num_handles) { |
DCHECK(handles); |
- DCHECK_LE(num_handles, kMaxMessageNumHandles); |
+ DCHECK_LE(num_handles, GetConfiguration().max_message_num_handles); |
for (uint32_t i = 0; i < num_handles; i++) { |
HandleToEntryMap::iterator it = handle_to_entry_map_.find(handles[i]); |
@@ -226,7 +229,7 @@ void HandleTable::RemoveBusyHandles(const MojoHandle* handles, |
void HandleTable::RestoreBusyHandles(const MojoHandle* handles, |
uint32_t num_handles) { |
DCHECK(handles); |
- DCHECK_LE(num_handles, kMaxMessageNumHandles); |
+ DCHECK_LE(num_handles, GetConfiguration().max_message_num_handles); |
for (uint32_t i = 0; i < num_handles; i++) { |
HandleToEntryMap::iterator it = handle_to_entry_map_.find(handles[i]); |