From 80ee3d3440233b50bbe818b2f74f6aac8841edfa Mon Sep 17 00:00:00 2001 From: frosch Date: Sat, 24 Jan 2009 21:38:30 +0000 Subject: (svn r15262) -Fix: AIEvents were not freed, when they were not queued for any AI. --- src/ai/ai_core.cpp | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'src/ai') diff --git a/src/ai/ai_core.cpp b/src/ai/ai_core.cpp index 04a759d47..60475f24b 100644 --- a/src/ai/ai_core.cpp +++ b/src/ai/ai_core.cpp @@ -160,28 +160,47 @@ /* static */ void AI::NewEvent(CompanyID company, AIEvent *event) { + /* AddRef() and Release() need to be called at least once, so do it here */ + event->AddRef(); + /* Clients should ignore events */ - if (_networking && !_network_server) return; + if (_networking && !_network_server) { + event->Release(); + return; + } /* Only AIs can have an event-queue */ - if (!IsValidCompanyID(company) || IsHumanCompany(company)) return; + if (!IsValidCompanyID(company) || IsHumanCompany(company)) { + event->Release(); + return; + } /* Queue the event */ CompanyID old_company = _current_company; _current_company = company; AIEventController::InsertEvent(event); _current_company = old_company; + + event->Release(); } /* static */ void AI::BroadcastNewEvent(AIEvent *event, CompanyID skip_company) { + /* AddRef() and Release() need to be called at least once, so do it here */ + event->AddRef(); + /* Clients should ignore events */ - if (_networking && !_network_server) return; + if (_networking && !_network_server) { + event->Release(); + return; + } /* Try to send the event to all AIs */ for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) { if (c != skip_company) AI::NewEvent(c, event); } + + event->Release(); } void CcAI(bool success, TileIndex tile, uint32 p1, uint32 p2) -- cgit v1.2.3-54-g00ecf