Summary
fbird_kill_attachment() reports success but the target attachment survives on Firebird 3.0.
Reproduction
Two connections to the same FB 3.0 database (firebirdsql/firebird:3 container):
$c1 obtains its own attachment id via SELECT CURRENT_CONNECTION FROM RDB$DATABASE (= 428)
$c2->killAttachment(428) -> return value true
- ~0.5s later, from
$c2: SELECT COUNT(*) FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = 428 -> 1 (still attached)
$c1 continues to work normally afterwards: isConnectionValid() === true, ping() === true, prepare('SELECT ...') succeeds
Evidence
Observed 2026-08-22 while writing a dead-link regression test for the Doctrine driver (satwareAG/doctrine-firebird-driver#162). Probe script available on request.
| Check |
Result |
killAttachment() return |
true |
Attachment row still in MON$ATTACHMENTS |
yes |
| Victim connection usable after kill |
yes |
Environment
Expected
Either the attachment is terminated (row gone, victim's next operation fails), or the call reports failure instead of true.
Acceptance criteria
Summary
fbird_kill_attachment()reports success but the target attachment survives on Firebird 3.0.Reproduction
Two connections to the same FB 3.0 database (
firebirdsql/firebird:3container):$c1obtains its own attachment id viaSELECT CURRENT_CONNECTION FROM RDB$DATABASE(= 428)$c2->killAttachment(428)-> return value true$c2:SELECT COUNT(*) FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = 428-> 1 (still attached)$c1continues to work normally afterwards:isConnectionValid() === true,ping() === true,prepare('SELECT ...')succeedsEvidence
Observed 2026-08-22 while writing a dead-link regression test for the Doctrine driver (satwareAG/doctrine-firebird-driver#162). Probe script available on request.
killAttachment()returnMON$ATTACHMENTSEnvironment
firebirdsql/firebird:3(Linux container)fbird_drop_table_forceunknown ISC error)Expected
Either the attachment is terminated (row gone, victim's next operation fails), or the call reports failure instead of true.
Acceptance criteria
fbird_kill_attachment()on FB 3.0 either kills reliably or returns false/throws on failure.phptcovering the two-connection kill scenario