Dedicated server crash - NullReferenceException in MySoundBlock.UpdateLoopableSoundEmitter (Update 1

GFLOXE shared this bug 20 days ago
Investigating

Title: Dedicated server crash - NullReferenceException in MySoundBlock.UpdateLoopableSoundEmitter (Update 1.210 Prosperity)


Game version: 01_210_011 (Update 1.210 - Prosperity, released July 27, 2026)

Server type: Dedicated server (hosted via Nitrado)

Mode: Experimental mode enabled


Description:

My dedicated server crashes to desktop with a NullReferenceException thrown from MySoundBlock.UpdateLoopableSoundEmitter(). The crash happened shortly after updating to the new Prosperity update (1.210), which included audio-related changes (3D audio processing fixes, rebalanced sound levels). The crash occurs during normal server operation, not tied to any specific player action that I could identify.


Exception log:

System.NullReferenceException: Object reference not set to an instance of an object.

at SpaceEngineers.Game.Entities.Blocks.MySoundBlock.UpdateLoopableSoundEmitter()

at SpaceEngineers.Game.Entities.Blocks.MySoundBlock.UpdateBeforeSimulation()

at Sandbox.Game.Entities.MyParallelEntityUpdateOrchestrator.UpdateBeforeSimulation()

at Sandbox.Game.Entities.MyParallelEntityUpdateOrchestrator.DispatchBeforeSimulation()

at Sandbox.Game.Entities.MyEntities.UpdateBeforeSimulation()

at Sandbox.Game.World.MySector.UpdateBeforeSimulation()

at Sandbox.Game.World.MySession.UpdateComponents()

at Sandbox.Game.World.MySession.Update(MyTimeSpan updateTime)

at Sandbox.MySandboxGame.Update()

at Sandbox.Engine.Platform.Game.UpdateInternal()

at Sandbox.Engine.Platform.Game.RunSingleFrame()

at Sandbox.Engine.Platform.FixedLoop.<>c__DisplayClass11_0.<Run>b__0()

at Sandbox.Engine.Platform.GenericLoop.Run(VoidAction tickCallback)

at Sandbox.Engine.Platform.Game.RunLoop()

at Sandbox.MySandboxGame.Run(Boolean customRenderLoop, Action disposeSplashScreen)

at VRage.Dedicated.DedicatedServer.RunInternal(String instanceName)

at VRage.Dedicated.DedicatedServer.RunMain(String instanceName, String customPath, Boolean isService, Boolean showConsole, Boolean checkAlive)

at VRage.Dedicated.DedicatedServer.ProcessArgs(String[] args)

at VRage.Dedicated.DedicatedServer.Run(String[] args, Action`1 initializeServices)

at SpaceEngineersDedicated.MyProgram.Main(String[] args)


Crash info:

AppVersion: 01_210_011

IsOutOfMemory: False

IsGPU: False

IsHang: False

ProcessRunTime: 120 seconds


Additional context:

- "Realistic Sound" setting is disabled on my server, so this doesn't appear to be related to that feature.

- I have several workshop mods active (Nanobot Build and Repair System, Small Connector Convertor, Text HUD API, LCD Percentage Bars). None of them touch audio/sound systems, and the exception stack trace is entirely within vanilla game code, not mod code.

- This started immediately after updating to 1.210 Prosperity, which included audio-related changes in this update cycle.


Could you please look into this? I'm happy to provide the full server log file if needed.


Thanks!

Replies (2)

photo
2

Hello Engineer,

Thank you for your report.

To help us investigate this crash, could you please provide the following files from the affected server:

  • The complete server log from the session in which the crash occurred
  • The affected saved world
  • The minidump generated by the crash, if available

Kind regards,

Keen Software House QA Department

photo
1

Hi,


Thanks for the reply. Here's more info:


The crash is fully reproducible - it has happened repeatedly with the exact same stack trace (NullReferenceException in MySoundBlock.UpdateLoopableSoundEmitter) at least 17 times between yesterday evening (July 27, ~22:43) and this morning (July 28, ~08:38). The server crashes anywhere between 2 and 8 minutes after each restart, always with the identical error. I'm attaching the most recent server log from this session (SpaceEngineersDedicated_20260728_083632734.log), and I can provide several other consecutive crash logs from the same session if that helps.


I do have the saved world file, but I'm unable to upload it through your website (the file is too large / the upload doesn't seem to accept it). Would it be possible to send it to you by email instead, or is there another way I could share it (e.g. a link to a file transfer service)? Let me know what works best on your end.


No minidump file was available on my end. idk


Thanks for looking into this!

photo
1

oh juste zip lol

photo
photo
1

Hello Engineer,

Thank you for providing the save and additional information.

We tested the affected world on version 1.210.012. The server did not crash when the world was loaded without mods. However, after enabling the Nanobot Build and Repair System mod, we were able to reproduce the crash with the same MySoundBlock.UpdateLoopableSoundEmitter() stack trace shown in your report.

Since the issue appears to be caused by this mod, please try removing or disabling it and contact the mod author regarding the crash.

We will keep the report in Need More Info in case you are still able to reproduce the same crash in an unmodified world without this mod.

Kind regards,

Keen Software House QA Department

photo
1

Hi,

Sorry for the late reply. I think I found the actual cause of the crash.

In my world, I had placed a blueprint ship, and this specific ship produces a sound. It seems like this sound is what's crashing the server (the NullReferenceException in MySoundBlock.UpdateLoopableSoundEmitter). I'm not sure exactly why this sound causes the crash, but after removing/dealing with this ship, the crash stopped happening.

Not sure if this is related to the Nanobot Build and Repair System mod or not — the ship might have been interacting with it, but the crash seems tied to the sound block on that ship specifically.

Let me know if you need more info (world file with just that ship, logs, etc.) to help investigate further.


Thanks!

photo
1

A bit more context:

Placing a grid whose blueprint contains a MyObjectBuilder_SoundBlock saved with IsPlaying=true (block was actively playing a looping sound when the blueprint was created) crashes the server on the very next simulation tick with a NullReferenceException in MySoundBlock.UpdateLoopableSoundEmitter(). Reproducible via copy-paste of the blueprint, and via building the grid from a projection.


Steps to reproduce:

1. Place a sound block on a grid. Set a loopable cue (IsLoopableSound=true), start it playing.

2. While it's playing, save/export the grid as a blueprint. The block's SBC entry looks like:

<MyObjectBuilder_CubeBlock xsi:type="MyObjectBuilder_SoundBlock">

<Range>250</Range>

<Volume>1</Volume>

<CueName>SoundBlockAlert2</CueName>

<LoopPeriod>3</LoopPeriod>

<IsPlaying>true</IsPlaying>

<ElapsedSoundSeconds>1.86639786</ElapsedSoundSeconds>

<IsLoopableSound>true</IsLoopableSound>

</MyObjectBuilder_CubeBlock>

3. Either:

- a) Copy the grid and paste it (blueprint paste), or

- b) Build the grid from a projection usincted model,

on a dedicated server.

4. Server crashes on next tick:


System.NullReferenceException: Object reference not set to an instance of an object.

at SpaceEngineers.Game.Entities.Blocks.MydEmitter()

at SpaceEngineers.Game.Entities.Blocks.MySoundBlock.UpdateBeforeSimulation()

at Sandbox.Game.Entities.MyParallelEntityUpdateOrchestrator.UpdateBeforeSimulation()

at Sandbox.Game.Entities.MyParallelEntityUpdateOrchestrator.DispatchBeforeSimulation()

at Sandbox.Game.Entities.MyEntities.UpdateBeforeSimulation()

at Sandbox.Game.World.MySector.UpdateBefo

at Sandbox.Game.World.MySession.UpdateComponents()

at Sandbox.Game.World.MySession.Update(MyTimeSpan updateTime)

at Sandbox.MySandboxGame.Update()

at Sandbox.Engine.Platform.Game.UpdateInternal()

at Sandbox.Engine.Platform.Game.RunSingleFrame()

at Sandbox.Engine.Platform.FixedLoop.<>c_

at Sandbox.Engine.Platform.GenericLoop.Run(VoidAction tickCallback)

at Sandbox.Engine.Platform.Game.RunLoop()

at Sandbox.MySandboxGame.Run(Boolean customRenderLoop, Action disposeSplashScreen)

at VRage.Dedicated.DedicatedServer.RunInternal(String instanceName)

at VRage.Dedicated.DedicatedServer.RunMain(String instanceName, String customPath, Boolean isService, Boolean showConsole, Boolean checkAlive)

at VRage.Dedicated.DedicatedServer.ProcessArgs(String[] args)

at VRage.Dedicated.DedicatedServer.Run(String[] args, Action`1 initializeServices)

at SpaceEngineersDedicated.MyProgram.Main


Analysis:

IsPlaying=true in the object builder tells the block it should already be mid-loop as soon as it exists in the world. But the sound emitter object is only constructed via the normal "start playing" path (player interaction, or the safe world-load init sequence) - not during deserialization from a blueprint. Grids that come into existence via paste or projection-build skip that safe path, so UpdateBeforeSimulation sees IsPlaying=true, calls UpdateLoopableSoundEmitter(), and hits an emitter reference that was never created. Regular world load appears

unaffected, implying it goes through a diffeste/projection-build.


Impact: Full dedicated-server process crash, not a recoverable in-game error. Any blueprint exported while a sound

block is actively playing becomes a live greuilding it from a projection takes the server down. This is easy to hit by accident (export a ship while a sound block loop is running) and could be abused

deliberately by sharing "poisoned" blueprint


Suggested fix: In MySoundBlock, null-check the sound emitter in UpdateLoopableSoundEmitter(), and lazily create it if IsPlaying=true was set from the object builder but no emitter exists yet - matching whatever init path world-load uses to avoid this.


Workaround for affected players: Before sharre any sound blocks are toggled off(IsPlaying=false, ElapsedSoundSeconds=0) before export.

photo
Leave a Comment
 
Attach a file