Signal '…' is already connected to given callable '…' in that object in Godot 4

By Eduardo Orellana · Updated

The signal is already connected to that method, and Godot refuses a second identical connection. Calling hit.connect(_on_hit) twice prints Signal 'hit' is already connected to given callable 'Node(repro.gd)::_on_hit' in that object. Connect once, in _ready() or in the editor's Node dock, or check is_connected() first.

AppImage, x86_64. Ubuntu 22.04, Debian 12, Fedora 39 or newer.

Intel or AMD Chromebook, with Linux turned on.

Download for macOSDownload for Windows

What Godot is checking

Object.connect() keeps one connection per signal and callable pair. Connecting the same pair again is refused with this engine error; the existing connection stays and the script carries on.

A signal connected in the editor's Node dock and again in code is the usual way to hit it: the scene file already holds the connection when _ready() runs.

Reproduce it

A hit signal connected to the same method twice.

extends Node

signal hit

func _on_hit() -> void:
	print("hit")

func _ready() -> void:
	hit.connect(_on_hit)
	hit.connect(_on_hit)
	hit.emit()

What Godot 4.7.2 prints

Godot Engine v4.7.2.stable.mono.official.ed1daf0bf - https://godotengine.org

ERROR: Signal 'hit' is already connected to given callable 'Node(repro.gd)::_on_hit' in that object.
   at: connect (core/object/object.cpp:1562)
   GDScript backtrace (most recent call first):
       [0] _ready (res://answers/signal-is-already-connected-to-given-callable/repro.gd:10)
hit

Fix it

Connect only when not already connected.

extends Node

signal hit

func _on_hit() -> void:
	print("hit")

func _ready() -> void:
	for i in 2:
		if not hit.is_connected(_on_hit):
			hit.connect(_on_hit)
	hit.emit()

What the fixed script prints

Godot Engine v4.7.2.stable.mono.official.ed1daf0bf - https://godotengine.org

hit

Verified on Godot 4.7.2

Both scripts on this page were run headless on Godot 4.7.2 (4.7.2.stable.mono.official.ed1daf0bf) on 18 October 2026, and the output above is what Godot printed, unedited.

Where the check lives in Godot's source: [object.cpp line 1562, the message](https://github.com/godotengine/godot/blob/4.7.2-stable/core/object/object.cpp#L1562).

Questions

Does the method then run twice?
No. The second connect() is refused, so the method runs once per emit, as the repro printed.
Can I connect the same method twice on purpose?
Pass CONNECT_REFERENCE_COUNTED as the flags; each connect() then adds a count and disconnect() removes one, but the method still runs once per emit.