From abe9479ced37e34ce09fccf8b6d0311e3073699a Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sun, 12 Jul 2026 00:14:30 +0200 Subject: [PATCH] Bugfix: removing a pin from a Circuit does not crash if the pin was not disconnected before. Now it's disconnected automatically. --- src/db/db/dbCircuit.cc | 1 + testdata/ruby/dbNetlist.rb | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/db/db/dbCircuit.cc b/src/db/db/dbCircuit.cc index db2354046..9a6f2bef4 100644 --- a/src/db/db/dbCircuit.cc +++ b/src/db/db/dbCircuit.cc @@ -353,6 +353,7 @@ Pin &Circuit::add_pin (const std::string &name) void Circuit::remove_pin (size_t id) { if (id < m_pin_by_id.size () && ! tl::is_null_iterator (m_pin_by_id [id])) { + connect_pin (id, 0); m_pins.erase (m_pin_by_id [id]); m_pin_by_id [id] = pin_list::iterator (); } diff --git a/testdata/ruby/dbNetlist.rb b/testdata/ruby/dbNetlist.rb index 4bdd285a9..6447e0bdc 100644 --- a/testdata/ruby/dbNetlist.rb +++ b/testdata/ruby/dbNetlist.rb @@ -213,6 +213,15 @@ class DBNetlist_TestClass < TestBase assert_equal(p1.name, "X") assert_equal(p2.name, "B") + n1 = c.create_net("NET1") + n2 = c.create_net("NET2") + + c.connect_pin(p1.id, n1) + assert_equal(n1.pin_count, 1) + + c.connect_pin(p2.id, n2) + assert_equal(n2.pin_count, 1) + assert_equal(p1.property(17), nil) p1.set_property(17, 42) assert_equal(p1.property(17), 42) @@ -245,6 +254,9 @@ class DBNetlist_TestClass < TestBase c.remove_pin(0) + assert_equal(n1.pin_count, 0) + assert_equal(n2.pin_count, 1) + names = [] c.each_pin { |p| names << p.name } assert_equal(names, [ "B" ]) @@ -253,6 +265,13 @@ class DBNetlist_TestClass < TestBase assert_equal(c.pin_by_id(1) == nil, false) assert_equal(c.pin_by_id(1).name, "B") + c.remove_pin(1) + + assert_equal(n1.pin_count, 0) + assert_equal(n2.pin_count, 0) + + assert_equal(c.pin_by_id(1) == nil, true) + end def test_4_Device