Skip to content

Conversation

@EmandM
Copy link
Collaborator

@EmandM EmandM commented Jun 13, 2025

Continues #2540
Fixes #2539

Changelog

  • Added: LocalClientCannotWrite function to co-locate the shared functionality
  • Fixed: Ensure that the NetworkManager exists before attempting to access the LocalClientId

Testing and Documentation

  • No tests have been added.

Backport

Up-ported in #3503

@EmandM EmandM requested a review from a team as a code owner June 13, 2025 20:56
@EmandM EmandM added the port:2.x-needed This issue needs to be ported to 2.X branch label Jun 13, 2025
@EmandM EmandM enabled auto-merge (squash) June 13, 2025 21:59
NoelStephensUnity added a commit that referenced this pull request Jun 14, 2025
…kManager [Up-port] (#3504)

<!-- Replace this block with what this PR does and why. Describe what
you'd like reviewers to know, how you applied the engineering
principles, and any interesting tradeoffs made. Delete bullet points
below that don't apply, and update the changelog section as appropriate.
-->

<!-- Add short version of the JIRA ticket to the PR title (e.g. "feat:
new shiny feature [MTT-123]") -->
Up-port of #3502  
Fixes #2539 


## Changelog

- Added: `LocalClientCannotWrite` function to co-locate the shared
functionality
- Fixed: Ensure that the `NetworkManager` exists before attempting to
access the `LocalClientId`

## Testing and Documentation

- No tests have been added.

<!-- Uncomment and mark items off with a * if this PR deprecates any
API:
### Deprecated API
- [ ] An `[Obsolete]` attribute was added along with a `(RemovedAfter
yyyy-mm-dd)` entry.
- [ ] An [api updater] was added.
- [ ] Deprecation of the API is explained in the CHANGELOG.
- [ ] The users can understand why this API was removed and what they
should use instead.
-->

## Backport

<!-- If this is a backport:
 - Add the following to the PR title: "\[Backport\] ..." .
 - Link to the original PR.
If this needs a backport - state this here
If a backport is not needed please provide the reason why.
If the "Backports" section is not present it will lead to a CI test
failure.
-->

Backported in #3502

---------

Co-authored-by: unity-renovate[bot] <120015202+unity-renovate[bot]@users.noreply.github.com>
Co-authored-by: Emma <[email protected]>
@PitouGames
Copy link
Contributor

PitouGames commented Jun 17, 2025

@EmandM
I just tested this branch in my project and confirm it fixes my original issue.
Thank you!

Copy link
Collaborator

@NoelStephensUnity NoelStephensUnity left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me!

@EmandM EmandM merged commit 283493e into develop Jun 24, 2025
42 checks passed
@EmandM EmandM deleted the fix/network-manager-exception branch June 24, 2025 06:00
ratijas added a commit to ratijas/CSync that referenced this pull request Aug 8, 2025
CSync leaves stale change handlers after quitting the hosted game.

When the host quits the game back to the main menu, ConfigSyncBehaviour
despawns and gets destroyed by Unity (not by .NET GC), but any delegates
connected to events in OnNetworkSpawn method remain and go stale.

So next time a player hosts a lobby without shutting down and
re-launching the game completely, when any of subscribed config files
or config entries change, stale delegates execute and try to assign to
a dead NetworkList _deltas[index]. Of course it results in an exception
being logged to the console by BepInEx (which wraps event handler
invocation in a try-catch).

To fix this, store subscribed delegates, and properly unsubscribe them
during despawn.

Note that NetworkList and _syncEnabled variable can not be cleared/reset
due to Unity issue which only got resolved in the most recent version.

References:
- https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/delegates/using-delegates
- Unity-Technologies/com.unity.netcode.gameobjects#3502

Fixes lc-sigurd#13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

port:2.x-completed This issue was ported to 2.X branch

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Can't do operations on NetworkList with no NetworkManager (offline)

5 participants