diff options
| author | Di Saber <37475791+DiSaber@users.noreply.github.com> | 2024-06-23 16:26:08 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-23 23:26:08 +0200 |
| commit | a854de787f511b8292f1f066efbddd78dc71a1e6 (patch) | |
| tree | 5cb5b4cef3239c36873139a65bb31253699b169d | |
| parent | 5308a28435efdeb6f5fecf14914eed6394600112 (diff) | |
| download | rapier-a854de787f511b8292f1f066efbddd78dc71a1e6.tar.gz rapier-a854de787f511b8292f1f066efbddd78dc71a1e6.tar.bz2 rapier-a854de787f511b8292f1f066efbddd78dc71a1e6.zip | |
Fix `attempt to subtract with overflow` panic in `SAPRegion::update_after_subregion_removal()` (#663)
* Swap a regular subtraction for a saturating subtraction
* chore: display a debug message if the SAP reach an unexpected state regarding sub-proper proxies removal.
---------
Co-authored-by: Sébastien Crozet <sebcrozet@dimforge.com>
| -rw-r--r-- | src/geometry/broad_phase_multi_sap/sap_region.rs | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/geometry/broad_phase_multi_sap/sap_region.rs b/src/geometry/broad_phase_multi_sap/sap_region.rs index 7e38eaa..f54b4ae 100644 --- a/src/geometry/broad_phase_multi_sap/sap_region.rs +++ b/src/geometry/broad_phase_multi_sap/sap_region.rs @@ -192,12 +192,23 @@ impl SAPRegion { pub fn update_after_subregion_removal(&mut self, proxies: &SAPProxies, layer_depth: i8) { if self.needs_update_after_subregion_removal { for axis in &mut self.axes { - self.subproper_proxy_count -= axis + let removed_count = axis .delete_deleted_proxies_and_endpoints_after_subregion_removal( proxies, &mut self.existing_proxies, layer_depth, ); + + if removed_count > self.subproper_proxy_count { + log::debug!( + "Reached unexpected state: attempted to remove more sub-proper proxies than added (removing: {}, total: {}).", + removed_count, + self.subproper_proxy_count + ); + self.subproper_proxy_count = 0; + } else { + self.subproper_proxy_count -= removed_count; + } } self.needs_update_after_subregion_removal = false; } |
