Dump infrastructure totals when mismatch detected in CheckCaches.

pull/16/head
Jonathan G Rennison 7 years ago
parent e11f295b29
commit 3813b3ca09

@ -43,6 +43,8 @@ struct CompanyInfrastructure {
for (RailType rt = RAILTYPE_BEGIN; rt < RAILTYPE_END; rt++) total += this->rail[rt];
return total;
}
char *Dump(char *buffer, const char *last) const;
};
typedef Pool<Company, CompanyID, 1, MAX_COMPANIES> CompanyPool;

@ -1166,3 +1166,18 @@ int CompanyServiceInterval(const Company *c, VehicleType type)
case VEH_SHIP: return vds->servint_ships;
}
}
char *CompanyInfrastructure::Dump(char *buffer, const char *last) const
{
for (RailType rt = RAILTYPE_BEGIN; rt != RAILTYPE_END; rt++) {
if (rail[rt]) buffer += seprintf(buffer, last, "Rail: %s: %u\n", GetStringPtr(GetRailTypeInfo(rt)->strings.name), rail[rt]);
}
buffer += seprintf(buffer, last, "Signal: %u\n", signal);
buffer += seprintf(buffer, last, "Road: %u\n", road[ROADTYPE_ROAD]);
buffer += seprintf(buffer, last, "Tram: %u\n", road[ROADTYPE_TRAM]);
buffer += seprintf(buffer, last, "Water: %u\n", water);
buffer += seprintf(buffer, last, "Station: %u\n", station);
buffer += seprintf(buffer, last, "Airport: %u\n", airport);
return buffer;
}

@ -1317,6 +1317,11 @@ void CheckCaches(bool force_check)
FOR_ALL_COMPANIES(c) {
if (MemCmpT(old_infrastructure.Get(i), &c->infrastructure) != 0) {
DEBUG(desync, 0, "infrastructure cache mismatch: company %i", (int)c->index);
char buffer[4096];
old_infrastructure.Get(i)->Dump(buffer, lastof(buffer));
DEBUG(desync, 0, "Previous:\n%s", buffer);
c->infrastructure.Dump(buffer, lastof(buffer));
DEBUG(desync, 0, "Recalculated:\n%s", buffer);
}
i++;
}

Loading…
Cancel
Save