(svn r15262) -Fix: AIEvents were not freed, when they were not queued for any AI.

pull/155/head
frosch 16 years ago
parent 9b73303b4d
commit 512cc98b35

@ -160,28 +160,47 @@
/* static */ void AI::NewEvent(CompanyID company, AIEvent *event) /* 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 */ /* Clients should ignore events */
if (_networking && !_network_server) return; if (_networking && !_network_server) {
event->Release();
return;
}
/* Only AIs can have an event-queue */ /* Only AIs can have an event-queue */
if (!IsValidCompanyID(company) || IsHumanCompany(company)) return; if (!IsValidCompanyID(company) || IsHumanCompany(company)) {
event->Release();
return;
}
/* Queue the event */ /* Queue the event */
CompanyID old_company = _current_company; CompanyID old_company = _current_company;
_current_company = company; _current_company = company;
AIEventController::InsertEvent(event); AIEventController::InsertEvent(event);
_current_company = old_company; _current_company = old_company;
event->Release();
} }
/* static */ void AI::BroadcastNewEvent(AIEvent *event, CompanyID skip_company) /* 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 */ /* Clients should ignore events */
if (_networking && !_network_server) return; if (_networking && !_network_server) {
event->Release();
return;
}
/* Try to send the event to all AIs */ /* Try to send the event to all AIs */
for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) { for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) {
if (c != skip_company) AI::NewEvent(c, event); if (c != skip_company) AI::NewEvent(c, event);
} }
event->Release();
} }
void CcAI(bool success, TileIndex tile, uint32 p1, uint32 p2) void CcAI(bool success, TileIndex tile, uint32 p1, uint32 p2)

Loading…
Cancel
Save