summaryrefslogtreecommitdiff
path: root/src/ai/ai_core.cpp
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2009-01-24 21:38:30 +0000
committerfrosch <frosch@openttd.org>2009-01-24 21:38:30 +0000
commit80ee3d3440233b50bbe818b2f74f6aac8841edfa (patch)
treec0ed0b1bddf1dd2a265a49e9750fa96b02fd9ee5 /src/ai/ai_core.cpp
parente8b5f4986147fa7036653abd82052f29ad27b85a (diff)
downloadopenttd-80ee3d3440233b50bbe818b2f74f6aac8841edfa.tar.xz
(svn r15262) -Fix: AIEvents were not freed, when they were not queued for any AI.
Diffstat (limited to 'src/ai/ai_core.cpp')
-rw-r--r--src/ai/ai_core.cpp25
1 files changed, 22 insertions, 3 deletions
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)