fix potential acces violation

develop
Geoffrey Merck 4 months ago
parent c6d47cc329
commit abe1b52d18

@ -80,11 +80,12 @@ void CDCSProtocolHandlerPool::release(CDCSProtocolHandler *handler)
assert(handler != NULL); assert(handler != NULL);
for (auto it=m_pool.begin(); it!=m_pool.end(); it++) { for (auto it=m_pool.begin(); it!=m_pool.end(); it++) {
if (it->second == handler) { if (it->second == handler) {
unsigned int port = handler->getPort();
m_pool.erase(it); m_pool.erase(it);
handler->close(); handler->close();
delete handler ; delete handler ;
m_index = m_pool.end(); // since we removed an element, m_index is ouot of order, just move it back to the end m_index = m_pool.end(); // since we removed an element, m_index is out of order, just move it back to the end
CLog::logInfo("Released DCS ProtocolHandler on port %u.\n", handler->getPort()); CLog::logInfo("Released DCS ProtocolHandler on port %u.\n", port);
return; return;
} }

@ -80,11 +80,12 @@ void CDExtraProtocolHandlerPool::release(CDExtraProtocolHandler *handler)
assert(handler != NULL); assert(handler != NULL);
for (auto it=m_pool.begin(); it!=m_pool.end(); it++) { for (auto it=m_pool.begin(); it!=m_pool.end(); it++) {
if (it->second == handler) { if (it->second == handler) {
unsigned int port = handler->getPort();
m_pool.erase(it); m_pool.erase(it);
handler->close(); handler->close();
delete handler; delete handler;
m_index = m_pool.end(); // m_index might be out of order, reset it m_index = m_pool.end(); // m_index might be out of order, reset it
CLog::logInfo("Releasing DExtra Protocol Handler on port %u.\n", handler->getPort()); CLog::logInfo("Releasing DExtra Protocol Handler on port %u.\n", port);
return; return;
} }

@ -81,11 +81,12 @@ void CDPlusProtocolHandlerPool::release(CDPlusProtocolHandler *handler)
assert(handler != NULL); assert(handler != NULL);
for (auto it=m_pool.begin(); it!=m_pool.end(); it++) { for (auto it=m_pool.begin(); it!=m_pool.end(); it++) {
if (it->second == handler) { if (it->second == handler) {
unsigned int port = handler->getPort();
m_pool.erase(it); m_pool.erase(it);
handler->close(); handler->close();
delete handler; delete handler;
m_index = m_pool.end(); // m_index might be ut of order so reset it m_index = m_pool.end(); // m_index might be ut of order so reset it
CLog::logInfo("Releasing DPlus ProtocolHandler on port %u.\n", handler->getPort()); CLog::logInfo("Releasing DPlus ProtocolHandler on port %u.\n", port);
return; return;
} }
} }

Loading…
Cancel
Save

Powered by TurnKey Linux.