Players who leave a server and rejoin that same server within a few seconds (Reconnect after a disconnect, reopening after closing the tab, fast server hopping) can lose everything they do afterwards. Depending on timing it shows as: stuck on the loading screen (#267), every rejoin rolling progress back (#163, #184, #196, #230, #260, #328), or an older save overwriting a newer one (#304, #312, #313, #326). Expected: rejoining at any speed loads the latest save and keeps saving. Technical: PlayerRemoving in ServerScriptService.Server calls Destroy, which yields on the leaving save, before it removes the entry from PlayerCache. A rejoin during that window hits the `if not PlayerCache[uid]` guard in PlayerAdded, skips Player.new, and shares the dying object; once teardown finishes the new session has no cache entry, so nothing autosaves or saves on leave. DataCache:Destroy also wipes PlayerMetaRef[uid] on a 1s delay without checking it still owns it, which makes Save return early on a fresh profile while still warning "Save Success". The update loop cleanup nils only its local, so dead objects stay in PlayerCache. DataCache:Save skips the leaving save when an autosave is in flight, and the UpdateAsync lock check warns but never returns nil, so stale writes win. Error Report since Sep 13: ~7,100 `index nil with 'Destroy'` at PlayerRemoving, 5,973 `missing method 'ReplicateSplitDataObj'`, 8.47M `missing method 'Save'` at the autosave loop, 148,566 `attempt cancel save`. Fix plan: remove from PlayerCache before Destroy and pcall Demount/AbandonNest; PlayerAdded waits for an in-flight teardown of the same UserId; update loop removes the entry by key; Destroy only clears PlayerMetaRef if it still points at itself; Save waits instead of skipping when leaving, and returns nil from the transform when another live session holds the lock.
Steps
1. Join a server, earn some pearls or DNA. 2. Close the tab or disconnect. 3. Click Reconnect (or rejoin the same server) within about 5 seconds. 4. Play a bit more, leave normally, rejoin. 5. Progress from step 4 is gone, or the loading screen never clears in step 3.
