Skip to content

Commit d2e0679

Browse files
authored
Win7::Match::EventSend(): Release mutex on exception
1 parent c7fdec2 commit d2e0679

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

InternetGamesServer/Win7/Match.cpp

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -280,22 +280,30 @@ Match::EventSend(const PlayerSocket& caller, const std::string& xml)
280280
default:
281281
throw MutexError("Win7::Match::EventSend(): An error occured waiting for mutex: " + std::to_string(GetLastError()));
282282
}
283-
const std::vector<QueuedEvent> events = ProcessEvent(*elEvent, caller);
284-
for (const QueuedEvent& ev : events)
283+
try
285284
{
286-
if (!ev.xml.empty())
285+
const std::vector<QueuedEvent> events = ProcessEvent(*elEvent, caller);
286+
for (const QueuedEvent& ev : events)
287287
{
288-
const bool includeSender = ev.includeSender && ev.xmlSender.empty();
289-
for (const PlayerSocket* p : m_players)
288+
if (!ev.xml.empty())
290289
{
291-
if (includeSender || p != &caller)
292-
p->OnEventReceive(ev.xml);
290+
const bool includeSender = ev.includeSender && ev.xmlSender.empty();
291+
for (const PlayerSocket* p : m_players)
292+
{
293+
if (includeSender || p != &caller)
294+
p->OnEventReceive(ev.xml);
295+
}
296+
}
297+
if (!ev.xmlSender.empty())
298+
{
299+
caller.OnEventReceive(ev.xmlSender);
293300
}
294301
}
295-
if (!ev.xmlSender.empty())
296-
{
297-
caller.OnEventReceive(ev.xmlSender);
298-
}
302+
}
303+
catch (...)
304+
{
305+
ReleaseMutex(m_mutex);
306+
throw;
299307
}
300308
if (!ReleaseMutex(m_mutex))
301309
throw MutexError("Win7::Match::EventSend(): Couldn't release mutex: " + std::to_string(GetLastError()));

0 commit comments

Comments
 (0)