Skip to content

Commit abcea66

Browse files
committed
Ensure that size is a multiple of Hole's alignment to avoid alignment errors
1 parent 5bc1beb commit abcea66

File tree

3 files changed

+6
-3
lines changed

3 files changed

+6
-3
lines changed

src/hole.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ impl HoleList {
8383

8484
/// A block containing free memory. It points to the next hole and thus forms a linked list.
8585
#[cfg(not(test))]
86-
struct Hole {
86+
pub struct Hole {
8787
size: usize,
8888
next: Option<Unique<Hole>>,
8989
}

src/lib.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
#[macro_use]
77
extern crate std;
88

9-
use hole::HoleList;
9+
use hole::{Hole, HoleList};
10+
use core::mem;
1011

1112
mod hole;
1213
#[cfg(test)]
@@ -62,6 +63,7 @@ impl Heap {
6263
if size < HoleList::min_size() {
6364
size = HoleList::min_size();
6465
}
66+
let size = align_up(size, mem::align_of::<Hole>());
6567

6668
self.holes.allocate_first_fit(size, align)
6769
}
@@ -77,6 +79,8 @@ impl Heap {
7779
if size < HoleList::min_size() {
7880
size = HoleList::min_size();
7981
}
82+
let size = align_up(size, mem::align_of::<Hole>());
83+
8084
self.holes.deallocate(ptr, size);
8185
}
8286

src/test.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use std::prelude::v1::*;
22
use std::mem::{size_of, align_of};
33
use super::*;
4-
use super::hole::*;
54

65
fn new_heap() -> Heap {
76
const HEAP_SIZE: usize = 1000;

0 commit comments

Comments
 (0)