Skip to content

Commit 046460c

Browse files
committed
Remove some code that MergeState used to prevent double frees
1 parent 19a59cb commit 046460c

File tree

1 file changed

+1
-33
lines changed

1 file changed

+1
-33
lines changed

src/libstd/sort.rs

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -353,40 +353,15 @@ struct RunState {
353353

354354
struct MergeState<T> {
355355
mut min_gallop: uint,
356-
//mut tmp: ~[T],
357-
mut last_hi: bool,
358-
mut last_bsort: bool,
359356
mut mergePt: uint,
360357
mut tmpPt: uint,
361358
mut array: &[mut T],
362359
runs: DVec<RunState>,
363-
364-
/*drop {
365-
unsafe {
366-
let size = self.tmp.len();
367-
// Move tmp back into invalid part of array
368-
if self.last_bsort {
369-
370-
} else if self.last_hi && size > 0 {
371-
self.mergePt -= self.tmpPt;
372-
move_vec(self.array, self.mergePt, self.tmp, 0, self.tmpPt);
373-
} else if !self.last_hi && size-self.tmpPt > 0 {
374-
move_vec(self.array, self.mergePt,
375-
self.tmp, self.tmpPt, size-self.tmpPt);
376-
}
377-
vec::raw::set_len(&mut self.tmp, 0);
378-
}
379-
}*/
380360
}
381361

382362
fn MergeState<T>() -> MergeState<T> {
383-
//let mut tmp = ~[];
384-
//vec::reserve(&mut tmp, INITIAL_TMP_STORAGE);
385363
MergeState {
386364
min_gallop: MIN_GALLOP,
387-
//tmp: move tmp,
388-
last_hi: false,
389-
last_bsort: false,
390365
mergePt: 0,
391366
tmpPt: 0,
392367
array: &[mut],
@@ -402,8 +377,6 @@ impl<T: Copy Ord> MergeState<T> {
402377

403378
if start == 0 { start += 1; }
404379

405-
self.last_bsort = true;
406-
407380
while start < size {
408381
let pivot = array[start];
409382
let mut left = 0;
@@ -425,7 +398,6 @@ impl<T: Copy Ord> MergeState<T> {
425398
array[left] = move pivot;
426399
start += 1;
427400
}
428-
self.last_bsort = false;
429401
}
430402

431403
fn push_run(&self, run_base: uint, run_len: uint) {
@@ -481,8 +453,6 @@ impl<T: Copy Ord> MergeState<T> {
481453
base2: uint, len2: uint) {
482454
assert len1 != 0 && len2 != 0 && base1+len1 == base2;
483455

484-
//vec::reserve(&mut self.tmp, len1);
485-
self.last_hi = false;
486456
let tmp = vec::to_mut(vec::slice(array, base1, base1+len1));
487457
self.tmpPt = 0;
488458
self.mergePt = base1;
@@ -598,8 +568,6 @@ impl<T: Copy Ord> MergeState<T> {
598568
base2: uint, len2: uint) {
599569
assert len1 != 1 && len2 != 0 && base1 + len1 == base2;
600570
601-
self.last_hi = true;
602-
603571
let tmp = vec::to_mut(vec::slice(array, base2, base2+len2));
604572
605573
let mut c1 = base1 + len1 - 1;
@@ -755,7 +723,7 @@ impl<T: Copy Ord> MergeState<T> {
755723
fn copy_vec<T: Copy>(dest: &[mut T], s1: uint,
756724
from: &[const T], s2: uint, len: uint) {
757725
assert s1+len <= dest.len() && s2+len <= from.len();
758-
726+
759727
let slice = vec::slice(from, s2, s2+len);
760728
for slice.eachi |i, v| {
761729
dest[s1+i] = *v;

0 commit comments

Comments
 (0)