From 1f849d76e26106401272014c0506bba6a90b6265 Mon Sep 17 00:00:00 2001 From: s33n Date: Wed, 2 Jun 2021 06:08:12 -0700 Subject: [PATCH 1/5] fixes dropping empty BlobVec --- crates/bevy_ecs/src/storage/blob_vec.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/crates/bevy_ecs/src/storage/blob_vec.rs b/crates/bevy_ecs/src/storage/blob_vec.rs index 7469355cb78c6..d6263688808ad 100644 --- a/crates/bevy_ecs/src/storage/blob_vec.rs +++ b/crates/bevy_ecs/src/storage/blob_vec.rs @@ -199,12 +199,13 @@ impl BlobVec { impl Drop for BlobVec { fn drop(&mut self) { self.clear(); - if self.item_layout.size() > 0 { + let array_layout = array_layout(&self.item_layout, self.capacity) + .expect("array layout should be valid"); + if array_layout.size() > 0 { unsafe { std::alloc::dealloc( self.get_ptr().as_ptr(), - array_layout(&self.item_layout, self.capacity) - .expect("array layout should be valid"), + array_layout, ); std::alloc::dealloc(self.swap_scratch.as_ptr(), self.item_layout); } From e98b312886f2054b7221abf009775ca21d8cfa1d Mon Sep 17 00:00:00 2001 From: s33n Date: Wed, 2 Jun 2021 07:12:25 -0700 Subject: [PATCH 2/5] fixed formatting --- crates/bevy_ecs/src/storage/blob_vec.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/crates/bevy_ecs/src/storage/blob_vec.rs b/crates/bevy_ecs/src/storage/blob_vec.rs index d6263688808ad..32437236fb9e6 100644 --- a/crates/bevy_ecs/src/storage/blob_vec.rs +++ b/crates/bevy_ecs/src/storage/blob_vec.rs @@ -199,14 +199,11 @@ impl BlobVec { impl Drop for BlobVec { fn drop(&mut self) { self.clear(); - let array_layout = array_layout(&self.item_layout, self.capacity) - .expect("array layout should be valid"); + let array_layout = + array_layout(&self.item_layout, self.capacity).expect("array layout should be valid"); if array_layout.size() > 0 { unsafe { - std::alloc::dealloc( - self.get_ptr().as_ptr(), - array_layout, - ); + std::alloc::dealloc(self.get_ptr().as_ptr(), array_layout); std::alloc::dealloc(self.swap_scratch.as_ptr(), self.item_layout); } } From c068b01cba03a4c208c06c87a5902b61e26be40c Mon Sep 17 00:00:00 2001 From: s33n Date: Wed, 2 Jun 2021 09:05:34 -0700 Subject: [PATCH 3/5] added unit test --- crates/bevy_ecs/src/storage/blob_vec.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/crates/bevy_ecs/src/storage/blob_vec.rs b/crates/bevy_ecs/src/storage/blob_vec.rs index 32437236fb9e6..5aaa3e8210227 100644 --- a/crates/bevy_ecs/src/storage/blob_vec.rs +++ b/crates/bevy_ecs/src/storage/blob_vec.rs @@ -386,4 +386,11 @@ mod tests { assert_eq!(*drop_counter.borrow(), 6); } + + #[test] + fn blob_vec_drop_empty() { + let item_layout = Layout::new::(); + let drop = TypeInfo::drop_ptr::; + let _blob_vec = BlobVec::new(item_layout, drop, 0); + } } From 16498856dda82d2155197fd161728a39e265487e Mon Sep 17 00:00:00 2001 From: thebluefish Date: Wed, 2 Jun 2021 10:03:16 -0700 Subject: [PATCH 4/5] Update crates/bevy_ecs/src/storage/blob_vec.rs Co-authored-by: Nathan Ward <43621845+NathanSWard@users.noreply.github.com> --- crates/bevy_ecs/src/storage/blob_vec.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_ecs/src/storage/blob_vec.rs b/crates/bevy_ecs/src/storage/blob_vec.rs index 5aaa3e8210227..821029103d7a0 100644 --- a/crates/bevy_ecs/src/storage/blob_vec.rs +++ b/crates/bevy_ecs/src/storage/blob_vec.rs @@ -391,6 +391,6 @@ mod tests { fn blob_vec_drop_empty() { let item_layout = Layout::new::(); let drop = TypeInfo::drop_ptr::; - let _blob_vec = BlobVec::new(item_layout, drop, 0); + let _ = BlobVec::new(item_layout, drop, 0); } } From 7ffb27e1a5b0b235377386d489206f3165bb379f Mon Sep 17 00:00:00 2001 From: thebluefish Date: Wed, 2 Jun 2021 10:03:24 -0700 Subject: [PATCH 5/5] Update crates/bevy_ecs/src/storage/blob_vec.rs Co-authored-by: Nathan Ward <43621845+NathanSWard@users.noreply.github.com> --- crates/bevy_ecs/src/storage/blob_vec.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_ecs/src/storage/blob_vec.rs b/crates/bevy_ecs/src/storage/blob_vec.rs index 821029103d7a0..d724728c177b2 100644 --- a/crates/bevy_ecs/src/storage/blob_vec.rs +++ b/crates/bevy_ecs/src/storage/blob_vec.rs @@ -388,7 +388,7 @@ mod tests { } #[test] - fn blob_vec_drop_empty() { + fn blob_vec_drop_empty_capacity() { let item_layout = Layout::new::(); let drop = TypeInfo::drop_ptr::; let _ = BlobVec::new(item_layout, drop, 0);