Skip to content

Harness: read past the family entry packets; client queue room for busy maps - #723

Merged
neeerp merged 2 commits into
masterfrom
v83/harness-family-entry
Oct 22, 2026
Merged

neeerp merged 2 commits into
masterfrom
v83/harness-family-entry

Conversation

@neeerp

@neeerp neeerp commented Oct 22, 2026

Copy link
Copy Markdown
Owner

Fixes the master suite failure on 47e520e (12 tests; last green 02fa988).

Harness: family packets on entering the game. Since #699, every entry ends with the Family window's INFO (0x5F) and entitlement list (0x64). After SetField, the login's map-setup drain stopped at the first of these and left it in the buffer, so tests that read the next packet strictly failed with "opcode 95 (Unknown)". The drain now waits for the entitlement list. It keeps INFO, the list and any SET_PRIVILEGE (0x67) in WorldSession::family, and leaves any other packet that arrives first to be read, in order. families.rs reads its entry packets from there, and opcode_name now names the three opcodes.

Server: client queue capacity, 256 → 1024. rank_rooms' "connection closed during packet read" was the world disconnecting the player as a slow client ("Client queue full") on entering 103000103. That map has 91 mobs, so the join replay is about 190 messages (spawn plus control for each mob), queued while the client actor is still busy with the map change. A fresh field could push this past 256.

Verified on a fresh stack: rank_rooms, cash_shop, change_channel, invalid_target_map_transfer, local_chat_same_map, map_npc_spawn, movement_same_map, portal_map_transfer, presence_different_channels, presence_same_map, starting_equipment, whisper_between_two_players, families (5), guilds (7) and buddy_list all pass, and the world log has no "queue full".

…e game

Every entry now ends with the Family window's INFO and entitlements (since
#699), which the login's map-setup drain stopped at and left for the tests,
so twelve tests that read the next packet strictly failed on opcode 95.
The drain now waits for them and keeps them in WorldSession::family,
leaving anything else in order; families.rs reads them from there.
Entering a map queues one message per NPC, player, mob and its control,
reactor and drop while the client actor is still busy with the map
change: about 190 for Kerning City's subway (103000103, 91 mobs), so a
fresh field's spawns could pass the 256 cap and disconnect the player as
a slow client (rank_rooms' 'connection closed during packet read').
@neeerp
neeerp merged commit 165eb64 into master Oct 22, 2026
1 check passed
@neeerp
neeerp deleted the v83/harness-family-entry branch October 22, 2026 08:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant