Skip to content

Commit 9da13b2

Browse files
committed
---
yaml --- r: 147419 b: refs/heads/try2 c: 5772401 h: refs/heads/master i: 147417: 8af6c3d 147415: c9317a4 v: v3
1 parent b0d9e84 commit 9da13b2

40 files changed

+744
-1476
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: 67c02222526d46875ddabfda1b7a936564f916ff
8+
refs/heads/try2: 57724012ff4bc48e362102b30113359c2f45c28d
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/Makefile.in

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -657,11 +657,6 @@ ifneq ($(strip $(findstring snap,$(MAKECMDGOALS)) \
657657
include $(CFG_SRC_DIR)mk/snap.mk
658658
endif
659659

660-
ifneq ($(findstring reformat,$(MAKECMDGOALS)),)
661-
CFG_INFO := $(info cfg: including reformat rules)
662-
include $(CFG_SRC_DIR)mk/pp.mk
663-
endif
664-
665660
ifneq ($(strip $(findstring check,$(MAKECMDGOALS)) \
666661
$(findstring test,$(MAKECMDGOALS)) \
667662
$(findstring perf,$(MAKECMDGOALS)) \

branches/try2/mk/clean.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ clean-generic-$(2)-$(1):
6363
-name '*.[odasS]' -o \
6464
-name '*.so' -o \
6565
-name '*.dylib' -o \
66+
-name '*.lib' -o \
6667
-name '*.dll' -o \
6768
-name '*.def' -o \
6869
-name '*.bc' \

branches/try2/mk/pp.mk

Lines changed: 0 additions & 39 deletions
This file was deleted.

branches/try2/mk/tests.mk

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -908,6 +908,8 @@ define DEF_RMAKE_FOR_T_H
908908
# $(2) target triple
909909
# $(3) host triple
910910

911+
912+
ifeq ($(2)$(3),$$(CFG_BUILD)$$(CFG_BUILD))
911913
check-stage$(1)-T-$(2)-H-$(3)-rmake-exec: \
912914
$$(call TEST_OK_FILE,$(1),$(2),$(3),rmake)
913915

@@ -927,6 +929,13 @@ $(3)/test/run-make/%-$(1)-T-$(2)-H-$(3).ok: \
927929
"$$(CC_$(3)) $$(CFG_GCCISH_CFLAGS_$(3))" \
928930
$$(HBIN$(1)_H_$(3))/rustdoc$$(X_$(3))
929931
@touch $$@
932+
else
933+
# FIXME #11094 - The above rule doesn't work right for multiple targets
934+
check-stage$(1)-T-$(2)-H-$(3)-rmake-exec:
935+
@true
936+
937+
endif
938+
930939

931940
endef
932941

branches/try2/src/libextra/arc.rs

Lines changed: 58 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ use std::borrow;
5151
/// As sync::condvar, a mechanism for unlock-and-descheduling and signaling.
5252
pub struct Condvar<'a> {
5353
priv is_mutex: bool,
54-
priv failed: &'a mut bool,
54+
priv failed: &'a bool,
5555
priv cond: &'a sync::Condvar<'a>
5656
}
5757

@@ -226,7 +226,7 @@ impl<T:Send> MutexArc<T> {
226226
// not already unsafe. See borrow_rwlock, far below.
227227
(&(*state).lock).lock(|| {
228228
check_poison(true, (*state).failed);
229-
let _z = PoisonOnFail(&mut (*state).failed);
229+
let _z = PoisonOnFail::new(&mut (*state).failed);
230230
blk(&mut (*state).data)
231231
})
232232
}
@@ -239,10 +239,10 @@ impl<T:Send> MutexArc<T> {
239239
let state = self.x.get();
240240
(&(*state).lock).lock_cond(|cond| {
241241
check_poison(true, (*state).failed);
242-
let _z = PoisonOnFail(&mut (*state).failed);
242+
let _z = PoisonOnFail::new(&mut (*state).failed);
243243
blk(&mut (*state).data,
244244
&Condvar {is_mutex: true,
245-
failed: &mut (*state).failed,
245+
failed: &(*state).failed,
246246
cond: cond })
247247
})
248248
}
@@ -311,24 +311,28 @@ fn check_poison(is_mutex: bool, failed: bool) {
311311

312312
#[doc(hidden)]
313313
struct PoisonOnFail {
314-
failed: *mut bool,
314+
flag: *mut bool,
315+
failed: bool,
315316
}
316317

317318
impl Drop for PoisonOnFail {
318319
fn drop(&mut self) {
319320
unsafe {
320321
/* assert!(!*self.failed);
321322
-- might be false in case of cond.wait() */
322-
if task::failing() {
323-
*self.failed = true;
323+
if !self.failed && task::failing() {
324+
*self.flag = true;
324325
}
325326
}
326327
}
327328
}
328329

329-
fn PoisonOnFail<'r>(failed: &'r mut bool) -> PoisonOnFail {
330-
PoisonOnFail {
331-
failed: failed
330+
impl PoisonOnFail {
331+
fn new<'a>(flag: &'a mut bool) -> PoisonOnFail {
332+
PoisonOnFail {
333+
flag: flag,
334+
failed: task::failing()
335+
}
332336
}
333337
}
334338

@@ -392,7 +396,7 @@ impl<T:Freeze + Send> RWArc<T> {
392396
let state = self.x.get();
393397
(*borrow_rwlock(state)).write(|| {
394398
check_poison(false, (*state).failed);
395-
let _z = PoisonOnFail(&mut (*state).failed);
399+
let _z = PoisonOnFail::new(&mut (*state).failed);
396400
blk(&mut (*state).data)
397401
})
398402
}
@@ -407,10 +411,10 @@ impl<T:Freeze + Send> RWArc<T> {
407411
let state = self.x.get();
408412
(*borrow_rwlock(state)).write_cond(|cond| {
409413
check_poison(false, (*state).failed);
410-
let _z = PoisonOnFail(&mut (*state).failed);
414+
let _z = PoisonOnFail::new(&mut (*state).failed);
411415
blk(&mut (*state).data,
412416
&Condvar {is_mutex: false,
413-
failed: &mut (*state).failed,
417+
failed: &(*state).failed,
414418
cond: cond})
415419
})
416420
}
@@ -463,7 +467,7 @@ impl<T:Freeze + Send> RWArc<T> {
463467
blk(RWWriteMode {
464468
data: &mut (*state).data,
465469
token: write_mode,
466-
poison: PoisonOnFail(&mut (*state).failed)
470+
poison: PoisonOnFail::new(&mut (*state).failed)
467471
})
468472
})
469473
}
@@ -563,7 +567,7 @@ impl<'a, T:Freeze + Send> RWWriteMode<'a, T> {
563567
unsafe {
564568
let cvar = Condvar {
565569
is_mutex: false,
566-
failed: &mut *poison.failed,
570+
failed: &*poison.flag,
567571
cond: cond
568572
};
569573
blk(data, &cvar)
@@ -714,6 +718,25 @@ mod tests {
714718
}
715719
}
716720

721+
#[test]
722+
fn test_mutex_arc_access_in_unwind() {
723+
let arc = MutexArc::new(1i);
724+
let arc2 = arc.clone();
725+
task::try::<()>(proc() {
726+
struct Unwinder {
727+
i: MutexArc<int>
728+
}
729+
impl Drop for Unwinder {
730+
fn drop(&mut self) {
731+
self.i.access(|num| *num += 1);
732+
}
733+
}
734+
let _u = Unwinder { i: arc2 };
735+
fail!();
736+
});
737+
assert_eq!(2, arc.access(|n| *n));
738+
}
739+
717740
#[test] #[should_fail]
718741
fn test_rw_arc_poison_wr() {
719742
let arc = RWArc::new(1);
@@ -840,6 +863,26 @@ mod tests {
840863
assert_eq!(*num, 10);
841864
})
842865
}
866+
867+
#[test]
868+
fn test_rw_arc_access_in_unwind() {
869+
let arc = RWArc::new(1i);
870+
let arc2 = arc.clone();
871+
task::try::<()>(proc() {
872+
struct Unwinder {
873+
i: RWArc<int>
874+
}
875+
impl Drop for Unwinder {
876+
fn drop(&mut self) {
877+
self.i.write(|num| *num += 1);
878+
}
879+
}
880+
let _u = Unwinder { i: arc2 };
881+
fail!();
882+
});
883+
assert_eq!(2, arc.read(|n| *n));
884+
}
885+
843886
#[test]
844887
fn test_rw_downgrade() {
845888
// (1) A downgrader gets in write mode and does cond.wait.

branches/try2/src/libextra/glob.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ use std::io;
2828
use std::io::fs;
2929
use std::path::is_sep;
3030

31-
use sort;
32-
3331
/**
3432
* An iterator that yields Paths from the filesystem that match a particular
3533
* pattern - see the `glob` function for more details.
@@ -149,9 +147,8 @@ impl Iterator<Path> for GlobIterator {
149147

150148
fn list_dir_sorted(path: &Path) -> ~[Path] {
151149
match io::result(|| fs::readdir(path)) {
152-
Ok(children) => {
153-
let mut children = children;
154-
sort::quick_sort(children, |p1, p2| p2.filename() <= p1.filename());
150+
Ok(mut children) => {
151+
children.sort_by(|p1, p2| p2.filename().cmp(&p1.filename()));
155152
children
156153
}
157154
Err(..) => ~[]
@@ -771,4 +768,3 @@ mod test {
771768
assert!(Pattern::new("a/b").matches_path(&Path::new("a/b")));
772769
}
773770
}
774-

branches/try2/src/libextra/lib.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,6 @@ pub mod ringbuf;
6161
pub mod priority_queue;
6262
pub mod smallintmap;
6363

64-
pub mod sort;
65-
6664
pub mod dlist;
6765
pub mod treemap;
6866
pub mod btree;

branches/try2/src/libextra/priority_queue.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,6 @@ impl<T: Ord> Extendable<T> for PriorityQueue<T> {
213213

214214
#[cfg(test)]
215215
mod tests {
216-
use sort::merge_sort;
217216
use priority_queue::PriorityQueue;
218217

219218
#[test]
@@ -231,7 +230,8 @@ mod tests {
231230
#[test]
232231
fn test_top_and_pop() {
233232
let data = ~[2u, 4, 6, 2, 1, 8, 10, 3, 5, 7, 0, 9, 1];
234-
let mut sorted = merge_sort(data, |x, y| x.le(y));
233+
let mut sorted = data.clone();
234+
sorted.sort();
235235
let mut heap = PriorityQueue::from_vec(data);
236236
while !heap.is_empty() {
237237
assert_eq!(heap.top(), sorted.last());
@@ -311,11 +311,14 @@ mod tests {
311311
assert_eq!(heap.len(), 5);
312312
}
313313

314-
fn check_to_vec(data: ~[int]) {
314+
fn check_to_vec(mut data: ~[int]) {
315315
let heap = PriorityQueue::from_vec(data.clone());
316-
assert_eq!(merge_sort(heap.clone().to_vec(), |x, y| x.le(y)),
317-
merge_sort(data, |x, y| x.le(y)));
318-
assert_eq!(heap.to_sorted_vec(), merge_sort(data, |x, y| x.le(y)));
316+
let mut v = heap.clone().to_vec();
317+
v.sort();
318+
data.sort();
319+
320+
assert_eq!(v, data);
321+
assert_eq!(heap.to_sorted_vec(), data);
319322
}
320323

321324
#[test]

0 commit comments

Comments
 (0)