Skip to content

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

@maxkratt

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

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions