you don't need "default" case in switch by BG type when you exactly know and handle each possible roll result. No need to create recurrency and tiny possibility of freeze.
also MaNGOS 9781 does not have character_battleground_status ;-)
EDIT:
have you tested it with .debug bg ? because I cannot join as a singleplayer when I am invited using random option in debug. after that i cannot leave queue.
console:
WORLD: Recvd CMSG_BATTLEMASTER_JOIN Message from (GUID: 0 TypeId:4)
Adding Group to BattleGroundQueue bgTypeId : 32, bracket_id : 3, index : 3
Battleground: player joined queue for bg queue type 10 bg type 32: GUID 3, NAME
Xaraz
MapInstanced::CreateBattleGroundMap: instance:1 for map:489 and bgType:2 created
.
Battleground: invited plr Xaraz (3) to BG instance 1 queueindex 0 bgtype 2, I ca
n't help it if they don't press the enter battle button.
WORLD: Recvd CMSG_BATTLEFIELD_PORT Message
BattlegroundHandler: itrplayerstatus not found.
WORLD: CMSG_SET_ACTIVE_VOICE_CHANNEL
STORAGE_SIZE: 5
04 00 00 00 00
CMSG_TIME_SYNC_RESP
Time sync received: counter 2, client ticks 9769885, time since last sync 10023
Our ticks: 9769916, diff 31, latency 0
WORLD: CMSG_WORLD_STATE_UI_TIMER_UPDATE
WORLD: CMSG_SET_ACTIVE_VOICE_CHANNEL
STORAGE_SIZE: 5
04 00 00 00 00
CMSG_TIME_SYNC_RESP
Time sync received: counter 3, client ticks 9779895, time since last sync 10010
Our ticks: 9779926, diff 31, latency 0
CMSG_TIME_SYNC_RESP
Time sync received: counter 4, client ticks 9789908, time since last sync 10013
Our ticks: 9789940, diff 32, latency 0
WORLD: CMSG_WORLD_STATE_UI_TIMER_UPDATE
CMSG_TIME_SYNC_RESP
Time sync received: counter 5, client ticks 9799977, time since last sync 10069
Our ticks: 9800024, diff 47, latency 0
Battleground: removing player 3 from bg queue for instance 1 because of not pres
sing enter battle in time.
BattleGroundQueue: Removing player GUID 3, from bracket_id 3