Disconnecting nonexistent signal 'changed'

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By WilliamQiufeng

I’m setting textures multithreadedly. Here’s SetTextures():
public void SetTextures() { Texture = _hitObjectTextures[Parent.Parent.InputRetriever.Keys][Key] ?? Texture; Offset = new Vector2(-Texture.GetWidth() / 2f, -Texture.GetHeight()); if (Note.IsLongNote) { HoldEnd.Texture = _holdEndTextures[Parent.Parent.InputRetriever.Keys][Key] ?? HoldEnd.Texture; HoldEnd.Offset = new Vector2(-HoldEnd.Texture.GetWidth() / 2f, -HoldEnd.Texture.GetHeight()); var holdEndPosition = When(Note.StartTime) - When(Note.EndTime); HoldEnd.Position = holdEndPosition; HoldEnd.Visible = true; HoldBody.Texture = _holdBodyTextures[Parent.Parent.InputRetriever.Keys][Key] ?? HoldBody.Texture; HoldBody.Offset = new Vector2(-HoldBody.Texture.GetWidth() / 2f, -HoldBody.Texture.GetHeight()); HoldBody.Visible = true; HoldBody.Scale = new Vector2(1, Mathf.Abs(holdEndPosition.y) / HoldBody.Texture.GetHeight()); } }

Full error log:

E 0:00:05.802   _disconnect: Disconnecting nonexistent signal 'changed', slot: 3430:_texture_changed.
  <C++ Error>   Condition "!s->slot_map.has(target)" is true.
  <C++ Source>  core/object.cpp:1538 @ _disconnect()
  <Stack Trace> :0 @ void Godot.NativeCalls.godot_icall_1_24(IntPtr , IntPtr , IntPtr )()
                Sprite.cs:279 @ void Godot.Sprite.SetTexture(Godot.Texture )()
                Sprite.cs:28 @ void Godot.Sprite.set_Texture(Godot.Texture )()
                NoteNode.cs:37 @ void Quadrecep.GameMode.Keys.NoteNode.SetTextures()()
                Playfield.cs:135 @ void Quadrecep.GameMode.Keys.Playfield.GenerateNoteNodesForLane(System.Collections.Generic.List`1[Quadrecep.GameMode.Keys.Map.NoteObject] , System.Collections.Generic.List`1[Quadrecep.Map.ScrollVelocity] , Int32 )()
                Playfield.cs:84 @ void Quadrecep.GameMode.Keys.Playfield+<>c__DisplayClass27_1.<GenerateNoteNodesAsync>b__1()()
                :0 @ void System.Threading.Tasks.Task.InnerInvoke()()
                :0 @ void System.Threading.Tasks.Task.Execute()()
                :0 @ void System.Threading.Tasks.Task.ExecutionContextCallback(System.Object )()
                :0 @ void System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext , System.Threading.ContextCallback , System.Object , Boolean )()
                :0 @ void System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext , System.Threading.ContextCallback , System.Object , Boolean )()
                :0 @ void System.Threading.Tasks.Task.ExecuteWithThreadLocal(System.Threading.Tasks.Task& )()
                :0 @ Boolean System.Threading.Tasks.Task.ExecuteEntry(Boolean )()
                :0 @ void System.Threading.Tasks.Task.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()()
                :0 @ Boolean System.Threading.ThreadPoolWorkQueue.Dispatch()()
                :0 @ Boolean System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()()