Skip to content

SyncVar values reset to default before OnStopServer in host mode shutdown #1036

Description

@maxkratt

Note

Kindly provided by YefersonCC 🙏

Version: 4.7.2R
Mode: Host (Server + Client on same instance)

Discord URL: https://discord.com/channels/424284635074134018/923983677980045382/1497131094003290173

Problem:
When calling ServerManager.StopConnection(true) in host mode, SyncVar values are
reset to their initial values BEFORE OnStopServer executes on server-side.
This causes any cleanup logic in OnStopServer that reads SyncVars to get null/default values.

Root cause:
In ServerManager.Transport_OnServerConnectionState:
Started = false (IsServerStarted becomes false)
ClientManager.Objects.OnServerConnectionState(args) → triggers client-side teardown
→ DespawnWithoutSynchronization(asServer: false) → Deinitialize(false)
→ IsDeinitializing = true (because !IsServerStarted)
→ ResetState_SyncTypes(false) → CanReset(false) = true → SyncVars reset here
Objects.DespawnWithoutSynchronization(asServer: true) → server-side teardown
→ OnStopServer() → SyncVars are already null/default

Proposed fix:
One-line change in SyncBase.CanReset() — skip client-side reset when
OnStartServerCalled is still true (server hasn't run OnStopServer yet).

File to modify:
Assets/FishNet/Runtime/Object/Synchronizing/SyncBase.cs

protected bool CanReset(bool asServer)
{
             bool clientStarted = IsNetworkInitialized && NetworkManager.IsClientStarted;
-            return (asServer && !clientStarted) || (!asServer && NetworkBehaviour.IsDeinitializing); //remove
+
+            if (asServer)
+                return !clientStarted;
+
+            // Skip client-side reset if the server's OnStopServer hasn't been called yet.
+            // The server-side Deinitialize will handle the reset after OnStopServer completes.
+            if (NetworkBehaviour.OnStartServerCalled)
+                return false;
+
+            return NetworkBehaviour.IsDeinitializing;

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Resolved Pending ReleaseIssue is resolved and will be available on the noted version.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions