Avoid returning references that are mutex protected (#297)
* Fix unsafe calls and safeguard WebSocketMessage from being called w/ temporaries * Use unnamed namespace to express internal linkage * Avoid returning references that are mutex protected Motivation for this MR The antipattern of returning references to mutex protected members was removed. Since a caller can hold the reference it would make all class level locking meaningless. Instead values are returned. The IXWebSocketPerMessageDeflateOptions class was shrunk by 7 bytes (1 padding + 2*3) after changing the int members to the used uint8_t; side effects of that were handled. An inefficient "string -> int" was replaced by standard library. As seen here http://coliru.stacked-crooked.com/a/46b5990bafb9c626 this gives an order of magnitude better performance.
This commit is contained in:
@ -14,12 +14,12 @@ namespace ix
|
||||
{
|
||||
/// Default values as defined in the RFC
|
||||
const uint8_t WebSocketPerMessageDeflateOptions::kDefaultServerMaxWindowBits = 15;
|
||||
static const int minServerMaxWindowBits = 8;
|
||||
static const int maxServerMaxWindowBits = 15;
|
||||
static const uint8_t minServerMaxWindowBits = 8;
|
||||
static const uint8_t maxServerMaxWindowBits = 15;
|
||||
|
||||
const uint8_t WebSocketPerMessageDeflateOptions::kDefaultClientMaxWindowBits = 15;
|
||||
static const int minClientMaxWindowBits = 8;
|
||||
static const int maxClientMaxWindowBits = 15;
|
||||
static const uint8_t minClientMaxWindowBits = 8;
|
||||
static const uint8_t maxClientMaxWindowBits = 15;
|
||||
|
||||
WebSocketPerMessageDeflateOptions::WebSocketPerMessageDeflateOptions(
|
||||
bool enabled,
|
||||
@ -85,11 +85,7 @@ namespace ix
|
||||
|
||||
if (startsWith(token, "server_max_window_bits="))
|
||||
{
|
||||
std::string val = token.substr(token.find_last_of("=") + 1);
|
||||
std::stringstream ss;
|
||||
ss << val;
|
||||
int x;
|
||||
ss >> x;
|
||||
uint8_t x = std::stoi(token.substr(token.find_last_of("=") + 1));
|
||||
|
||||
// Sanitize values to be in the proper range [8, 15] in
|
||||
// case a server would give us bogus values
|
||||
@ -99,11 +95,7 @@ namespace ix
|
||||
|
||||
if (startsWith(token, "client_max_window_bits="))
|
||||
{
|
||||
std::string val = token.substr(token.find_last_of("=") + 1);
|
||||
std::stringstream ss;
|
||||
ss << val;
|
||||
int x;
|
||||
ss >> x;
|
||||
uint8_t x = std::stoi(token.substr(token.find_last_of("=") + 1));
|
||||
|
||||
// Sanitize values to be in the proper range [8, 15] in
|
||||
// case a server would give us bogus values
|
||||
|
Reference in New Issue
Block a user