aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDi Saber <37475791+DiSaber@users.noreply.github.com>2024-06-23 16:26:08 -0500
committerGitHub <noreply@github.com>2024-06-23 23:26:08 +0200
commita854de787f511b8292f1f066efbddd78dc71a1e6 (patch)
tree5cb5b4cef3239c36873139a65bb31253699b169d
parent5308a28435efdeb6f5fecf14914eed6394600112 (diff)
downloadrapier-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.rs13
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;
}