Skip to content

archipelago: auto-sync topology vertex count in set_topology to preve… - #626

Open
jschueller wants to merge 1 commit into
esa:masterfrom
jschueller:issue606
Open

archipelago: auto-sync topology vertex count in set_topology to preve…#626
jschueller wants to merge 1 commit into
esa:masterfrom
jschueller:issue606

Conversation

@jschueller

Copy link
Copy Markdown
Contributor

…nt crash

Calling set_topology() with a freshly constructed topology (e.g. pagmo::topology(pagmo::ring())) would replace the archipelago's topology with one having 0 vertices, while the archipelago may already contain islands. Subsequent evolve() would then crash when get_connections() is called with an out-of-bounds vertex index.

Fix by adding a num_vertices() method to the topology class and modifying set_topology() to automatically call push_back() until the topology has enough vertices for all existing islands.

Fixes #606

@sylvesterkaczmarek sylvesterkaczmarek left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The num_vertices_impl() fallback makes set_topology() non-terminating for existing custom topology UDAs that implement push_back() but not the new optional num_vertices(): every loop iteration still observes zero vertices. Either make vertex count part of the required topology concept or make the fallback track successful pushes, and add a legacy custom-topology regression.

…hang

Calling set_topology() with a freshly constructed topology would replace
the archipelago's topology with 0 vertices, crashing on evolve(). Fix by
adding topology::num_vertices() and auto-growing via push_back().

For legacy custom UDAs that provide push_back() but not num_vertices(),
the previous fallback returned 0, making the growth loop non-terminating.
Fix by tracking successful push_back()s in topo_inner (m_fallback_vertices)
and by bounding set_topology() to a fixed number of pushes. Add legacy
regression covering both topology::num_vertices() fallback and
archipelago::set_topology() with a legacy UDA.

Fixes esa#606
@jschueller

Copy link
Copy Markdown
Contributor Author

@sylvesterkaczmarek, done, thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] set_topology causing crash.

2 participants