What's new
  • NEW: Happy Cataclysm gaming! The fresh 4.3.4 Cataclysm Repack V20.0 is now live - and downloadable from our brand-new Emucoach App.
    Download it now
  • Mists of Pandaria is calling! Heya - did you know that the newest 5.4.8 MoP Repack - version 7.1 - is now live?
    Download now

Worldserver crash — Creature GUID overflow driven by PlayerBots (MoP Premium 7.1)

Kneuma

MoP Premium
Veteran Member
49
2025
24
[Location, Faction, Race]
Server-wide / worldserver core — not location, faction or race specific. Affects all maps, both factions, all races. Repack: Emucoach 5.4.8 Rev 7.1 Release (hash d451d085c1664afb6dade41d540b34d454348136), Win64.

[Name, Type]
Creature GUID allocation in the core — ObjectMgr::GenerateLowGuid. Type: server crash / core engine bug, triggered by the PlayerBot system.

[Problem Description]
worldserver.exe crashes repeatedly with C0000005 ACCESS_VIOLATION. All evidence points to the creature GUID counter hitting its hard cap (0x00FFFFFE = 16,777,214) in ObjectMgr::GenerateLowGuid (the "Creature guid overflow!" assertion), driven by world bots whose pets/totems/guardians permanently consume creature GUIDs.
Evidence:
- creature table MAX(guid) = 9,815,084 of the 16,777,214 cap -> only ~6.96M GUIDs of runtime headroom per boot.
- The creature GUID counter is recalculated from the DB at startup and is never freed/recycled at runtime; only a restart resets it.
- Crash frequency was ~1 every 1-2 days historically. The day PlayerbotEnableWorld was enabled on a populated realm it crashed 4 times in ~3 hours (16:59, 18:08, 19:58, 20:05). The ~70-110 min cadence matches the time for hundreds of roaming world bots to burn ~7M creature GUIDs via pets/totems/guardians.
- Restart resets the counter (~9.8M from DB), it climbs and overflows again — textbook exhaustion pattern.
Reproduction: MoP Premium 7.1, PlayerbotEnableWorld = 1, high PlayerbotAmount (e.g. 300); let the realm run with bots active (pet/summon classes especially); worldserver crashes within ~1-2 hours of uptime once the in-memory creature GUID counter reaches the cap.
Note: the generated crash .txt dumps are unsymbolicated (raw addresses only); full .dmp + worldserver.conf available on request, and I am happy to help test a fix.

[How it should work]
worldserver should not exhaust the creature GUID pool under normal bot operation. Suggested core directions: recycle freed creature GUIDs (return despawned / temporary-summon GUIDs to the pool), and/or widen the creature GUID space, and/or ensure PlayerBot temporary summons (pets/totems/guardians) do not permanently consume the persistent creature GUID range. Operator-side mitigations (lower PlayerbotAmount, disable PlayerbotEnableWorld, periodic restarts) only delay the crash — a core fix is needed for stable 24/7 uptime with world bots.
 
Thanks @ExO. One extra datapoint not in the report (confirmed after I posted it): it's a clean on/off switch — with PlayerbotEnableWorld = 0 the server runs stable for hours (2.5h+, zero crashes), vs crashing every few minutes under load with it on. So it's specifically the world-bot creature-GUID consumption, not just bot count — should make it quick to reproduce/confirm with debugging. Raw .dmp + worldserver.conf ready whenever you want them, and I'm around this weekend to test a patched build.

@peculiar.shove fwiw the 'Nivel 80' mail spam is a separate bot side-effect (bots mailing each other), not the cause here — the crash is creature-GUID exhaustion from bot pets/totems/guardians.
 
Update — source-grounded root cause. Cross-checked against upstream SkyFire (the open 5.4.8 base this derives from; your build may differ, but GenerateLowGuid is core engine code and the crash string is a verbatim match):
ObjectMgr::GenerateLowGuid -> case HIGHGUID_UNIT: `ASSERT(_hiCreatureGuid < 0x00FFFFFE && "Creature guid overflow!"); return _hiCreatureGuid++;`

Confirms: hard cap 16,777,214 (0x00FFFFFE); no runtime GUID recycling (bare ++); the counter is only reset at startup from MAX(guid) FROM creature +1. The creature/pet path uses ASSERT (-> abort / hard crash), unlike Auction/Mail/EquipmentSet which overflow gracefully via World::StopNow() — which is why this shows as the violent C0000005 crash rather than a clean shutdown.

[How it should work] additions: recycle despawned/temp-summon creature GUIDs to a free-list, and/or widen the creature GUID space, and/or ensure PlayerBot temporary summons (pets/totems/guardians) don't permanently consume the persistent creature GUID range.
 
  • Like
Reactions: ExO
Same issue here, I tried lowering Playerbot count and running an SQL flush daily as well as a server restart daily, but still seems to randomly hit.

I did notice once right before a crash a lot of the playerbots generating massive map issues so not sure if thats causing something.
 
@tazinator — second confirmation of the same bug, thanks for the data point. The "lowering count + daily restart still hits randomly" lines up with the source-side cause posted above: the cap (0x00FFFFFE) is a hard ceiling and _hiCreatureGuid increments monotonically with no recycling, so lowering bot count slows the approach to the cap but doesn't change the ceiling.

What I can say is verified on the live 7.1 repack here: PlayerBots.PlayerbotEnableWorld = 0 in worldserver.conf (then restart) stabilised it for me. The other bot modes — LFG / BG / Arena — are separate conf toggles and stay on, so bots still work for queued content. Worth trying if you haven't already.

On the "playerbots generating massive map issues right before a crash" — interesting observation, but I'd be guessing if I tied it directly to the GUID-cap mechanism (the ASSERT trips at the cap, not approaching it). Could be a separate symptom of bot pressure. If you can capture a Server.log slice from one of those moments, I'd love to see it — might point at a different angle.

Real fix lives in core code (ObjectMgr::GenerateLowGuid — see post #5). Until then, EnableWorld = 0 is the cleanest band-aid I've verified.
 
Back
Top