Improving possible multithreading in new send code.

This commit is contained in:
lotodore
2011-02-19 15:01:50 +00:00
parent 8279868417
commit f7315cd9e5
2 changed files with 18 additions and 26 deletions
+17 -25
View File
@@ -42,17 +42,13 @@ SenderHelper::Send(boost::shared_ptr<SessionData> session, boost::shared_ptr<Net
{
if (packet && session) {
SendDataManager &tmpManager = session->GetSendDataManager();
{
// First: Add packet to specific queue.
boost::mutex::scoped_lock lock(tmpManager.dataMutex);
if (tmpManager.GetAllocated() <= MAX_SEND_BUF_SIZE) {
InternalStorePacket(tmpManager, packet);
}
}
{
// Second: Activate async send, if needed.
tmpManager.AsyncSendNextPacket(session->GetAsioSocket());
// Add packet to specific queue.
boost::mutex::scoped_lock lock(tmpManager.dataMutex);
if (tmpManager.GetAllocated() <= MAX_SEND_BUF_SIZE) {
InternalStorePacket(tmpManager, packet);
}
// Activate async send, if needed.
tmpManager.AsyncSendNextPacket(session->GetAsioSocket());
}
}
@@ -61,23 +57,19 @@ SenderHelper::Send(boost::shared_ptr<SessionData> session, const NetPacketList &
{
if (!packetList.empty() && session) {
SendDataManager &tmpManager = session->GetSendDataManager();
{
// First: Add packets to specific queue.
boost::mutex::scoped_lock lock(tmpManager.dataMutex);
if (tmpManager.GetAllocated() <= MAX_SEND_BUF_SIZE) {
NetPacketList::const_iterator i = packetList.begin();
NetPacketList::const_iterator end = packetList.end();
while (i != end) {
if (*i)
InternalStorePacket(tmpManager, *i);
++i;
}
// Add packets to specific queue.
boost::mutex::scoped_lock lock(tmpManager.dataMutex);
if (tmpManager.GetAllocated() <= MAX_SEND_BUF_SIZE) {
NetPacketList::const_iterator i = packetList.begin();
NetPacketList::const_iterator end = packetList.end();
while (i != end) {
if (*i)
InternalStorePacket(tmpManager, *i);
++i;
}
}
{
// Second: Activate async send, if needed.
tmpManager.AsyncSendNextPacket(session->GetAsioSocket());
}
// Activate async send, if needed.
tmpManager.AsyncSendNextPacket(session->GetAsioSocket());
}
}