summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorattilamolnar <attilamolnar@hush.com>2013-08-19 19:15:41 +0200
committerattilamolnar <attilamolnar@hush.com>2013-08-27 15:33:05 +0200
commit27ecc025acf7b01f51b2ecc32c28180dc49d793c (patch)
tree675924b55fa4f0d9b6a099d8e83ca8a9095371e1 /src
parent5384ddf545575bc27904b3534fb9d2340de7a1d7 (diff)
m_spanningtree Changes to TreeSocket::WriteLine() to avoid string copies
- Change argument type to a reference to avoid copies of the string object - If the std::string implementation is using copy-on-write then calling operator[] on a mutable string results in a copy; avoid this by calling .c_str() instead
Diffstat (limited to 'src')
-rw-r--r--src/modules/m_spanningtree/compat.cpp16
-rw-r--r--src/modules/m_spanningtree/treesocket.h2
2 files changed, 12 insertions, 6 deletions
diff --git a/src/modules/m_spanningtree/compat.cpp b/src/modules/m_spanningtree/compat.cpp
index 0fc837beb..a9e48a10c 100644
--- a/src/modules/m_spanningtree/compat.cpp
+++ b/src/modules/m_spanningtree/compat.cpp
@@ -24,17 +24,19 @@
static std::string newline("\n");
-void TreeSocket::WriteLine(std::string line)
+void TreeSocket::WriteLine(const std::string& original_line)
{
if (LinkState == CONNECTED)
{
- if (line[0] != ':')
+ if (original_line.c_str()[0] != ':')
{
ServerInstance->Logs->Log(MODNAME, LOG_DEFAULT, "Sending line without server prefix!");
- line = ":" + ServerInstance->Config->GetSID() + " " + line;
+ WriteLine(":" + ServerInstance->Config->GetSID() + " " + original_line);
+ return;
}
if (proto_version != ProtocolVersion)
{
+ std::string line = original_line;
std::string::size_type a = line.find(' ');
std::string::size_type b = line.find(' ', a + 1);
std::string command = line.substr(a + 1, b-a-1);
@@ -159,11 +161,15 @@ void TreeSocket::WriteLine(std::string line)
}
}
}
+ ServerInstance->Logs->Log(MODNAME, LOG_RAWIO, "S[%d] O %s", this->GetFd(), line.c_str());
+ this->WriteData(line);
+ this->WriteData(newline);
+ return;
}
}
- ServerInstance->Logs->Log(MODNAME, LOG_RAWIO, "S[%d] O %s", this->GetFd(), line.c_str());
- this->WriteData(line);
+ ServerInstance->Logs->Log(MODNAME, LOG_RAWIO, "S[%d] O %s", this->GetFd(), original_line.c_str());
+ this->WriteData(original_line);
this->WriteData(newline);
}
diff --git a/src/modules/m_spanningtree/treesocket.h b/src/modules/m_spanningtree/treesocket.h
index 47bdef884..6d79711cc 100644
--- a/src/modules/m_spanningtree/treesocket.h
+++ b/src/modules/m_spanningtree/treesocket.h
@@ -237,7 +237,7 @@ class TreeSocket : public BufferedSocket
/** Send one or more complete lines down the socket
*/
- void WriteLine(std::string line);
+ void WriteLine(const std::string& line);
/** Handle ERROR command */
void Error(parameterlist &params);