Skip to content

Commit 1916732

Browse files
toffalettibrson
authored andcommitted
fix bug introduced by previous clean up. more clean up.
1 parent 89c9120 commit 1916732

File tree

1 file changed

+19
-23
lines changed

1 file changed

+19
-23
lines changed

src/libstd/rt/mpsc_queue.rs

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -34,24 +34,20 @@ use ptr::{mut_null, to_mut_unsafe_ptr};
3434
use cast;
3535
use option::*;
3636
use clone::Clone;
37-
use default::Default;
3837
use kinds::Send;
39-
use fmt;
4038

4139
struct Node<T> {
4240
next: AtomicPtr<Node<T>>,
4341
value: Option<T>,
4442
}
4543

4644
impl<T> Node<T> {
47-
fn new(value: T) -> Node<T> {
48-
Node{next: AtomicPtr::new(mut_null()), value: Some(value)}
45+
fn empty() -> Node<T> {
46+
Node{next: AtomicPtr::new(mut_null()), value: None}
4947
}
50-
}
5148

52-
impl<T> Default for Node<T> {
53-
fn default() -> Node<T> {
54-
Node{next: AtomicPtr::new(mut_null()), value: None}
49+
fn with_value(value: T) -> Node<T> {
50+
Node{next: AtomicPtr::new(mut_null()), value: Some(value)}
5551
}
5652
}
5753

@@ -77,27 +73,23 @@ impl<T: Send> Clone for Queue<T> {
7773
}
7874
}
7975

80-
impl<T: Send> fmt::Default for Queue<T> {
81-
fn fmt(value: &Queue<T>, f: &mut fmt::Formatter) {
82-
write!(f.buf, "Queue({})", value.state.get());
83-
}
84-
}
85-
8676
impl<T: Send> State<T> {
8777
pub fn new() -> State<T> {
88-
let mut state = State {
78+
State{
8979
pad0: [0, ..64],
9080
head: AtomicPtr::new(mut_null()),
9181
pad1: [0, ..64],
92-
stub: Default::default(),
82+
stub: Node::<T>::empty(),
9383
pad2: [0, ..64],
9484
tail: mut_null(),
9585
pad3: [0, ..64],
96-
};
97-
let stub = state.get_stub_unsafe();
98-
state.head.store(stub, Relaxed);
99-
state.tail = stub;
100-
state
86+
}
87+
}
88+
89+
fn init(&mut self) {
90+
let stub = self.get_stub_unsafe();
91+
self.head.store(stub, Relaxed);
92+
self.tail = stub;
10193
}
10294

10395
fn get_stub_unsafe(&mut self) -> *mut Node<T> {
@@ -106,7 +98,7 @@ impl<T: Send> State<T> {
10698

10799
fn push(&mut self, value: T) {
108100
unsafe {
109-
let node = cast::transmute(~Node::new(value));
101+
let node = cast::transmute(~Node::with_value(value));
110102
self.push_node(node);
111103
}
112104
}
@@ -155,7 +147,11 @@ impl<T: Send> State<T> {
155147

156148
impl<T: Send> Queue<T> {
157149
pub fn new() -> Queue<T> {
158-
Queue{state: UnsafeArc::new(State::new())}
150+
unsafe {
151+
let mut q = Queue{state: UnsafeArc::new(State::new())};
152+
(*q.state.get()).init();
153+
q
154+
}
159155
}
160156

161157
pub fn push(&mut self, value: T) {

0 commit comments

Comments
 (0)