Skip to content

Commit 172eb97

Browse files
committed
---
yaml --- r: 97209 b: refs/heads/dist-snap c: a9a7a42 h: refs/heads/master i: 97207: c1d746c v: v3
1 parent 1807cac commit 172eb97

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

95 files changed

+827
-2141
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ refs/heads/try: c274a6888410ce3e357e014568b43310ed787d36
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: 147ecfdd8221e4a4d4e090486829a06da1e0ca3c
9-
refs/heads/dist-snap: afe8f6e106cddab165fb09596f7b13ab04a71f71
9+
refs/heads/dist-snap: a9a7a427a1f1a61497105283594d32b976d7559f
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503
1212
refs/heads/try3: 9387340aab40a73e8424c48fd42f0c521a4875c0

branches/dist-snap/.gitmodules

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@
88
branch = master
99
[submodule "src/gyp"]
1010
path = src/gyp
11-
url = https://github.com/alexcrichton/gyp.git
11+
url = https://github.com/brson/gyp.git

branches/dist-snap/doc/tutorial.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3071,7 +3071,7 @@ Therefore, if you plan to compile your crate as a library, you should annotate i
30713071
30723072
# #[crate_type = "lib"];
30733073
// Package ID
3074-
#[crate_id = "farm#2.5"];
3074+
#[pkgid = "farm#2.5"];
30753075
30763076
// ...
30773077
# fn farm() {}
@@ -3095,7 +3095,7 @@ or setting the crate type (library or executable) explicitly:
30953095
// ...
30963096
30973097
// This crate is a library ("bin" is the default)
3098-
#[crate_id = "farm#2.5"];
3098+
#[pkgid = "farm#2.5"];
30993099
#[crate_type = "lib"];
31003100
31013101
// Turn on a warning
@@ -3116,7 +3116,7 @@ We define two crates, and use one of them as a library in the other.
31163116

31173117
~~~~
31183118
// world.rs
3119-
#[crate_id = "world#0.42"];
3119+
#[pkgid = "world#0.42"];
31203120
# extern mod extra;
31213121
pub fn explore() -> &'static str { "world" }
31223122
# fn main() {}

branches/dist-snap/mk/docs.mk

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
######################################################################
1414

1515
DOCS :=
16-
CDOCS :=
1716
DOCS_L10N :=
1817

1918
BASE_DOC_OPTS := --from=markdown --standalone --toc --number-sections
@@ -233,21 +232,8 @@ doc/$(1)/index.html: $$(RUSTDOC) $$(TLIB2_T_$(3)_H_$(3))/$(CFG_STDLIB_$(3))
233232
DOCS += doc/$(1)/index.html
234233
endef
235234

236-
define compiledoc
237-
doc/$(1)/index.html: $$(RUSTDOC) $$(TLIB2_T_$(3)_H_$(3))/$(CFG_STDLIB_$(3))
238-
@$$(call E, rustdoc: $$@)
239-
$(Q)$(RUSTDOC) --cfg stage2 $(2)
240-
241-
CDOCS += doc/$(1)/index.html
242-
endef
243-
244235
$(eval $(call libdoc,std,$(STDLIB_CRATE),$(CFG_BUILD)))
245236
$(eval $(call libdoc,extra,$(EXTRALIB_CRATE),$(CFG_BUILD)))
246-
$(eval $(call libdoc,native,$(LIBNATIVE_CRATE),$(CFG_BUILD)))
247-
$(eval $(call libdoc,green,$(LIBGREEN_CRATE),$(CFG_BUILD)))
248-
249-
$(eval $(call compiledoc,rustc,$(COMPILER_CRATE),$(CFG_BUILD)))
250-
$(eval $(call compiledoc,syntax,$(LIBSYNTAX_CRATE),$(CFG_BUILD)))
251237

252238

253239
ifdef CFG_DISABLE_DOCS
@@ -270,7 +256,6 @@ doc/version_info.html: version_info.html.template $(MKFILE_DEPS) \
270256
GENERATED += doc/version.md doc/version_info.html
271257

272258
docs: $(DOCS)
273-
compiler-docs: $(CDOCS)
274259

275260
docs-l10n: $(DOCS_L10N)
276261

branches/dist-snap/src/etc/vim/syntax/rust.vim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ syn keyword rustTrait Default
7878
syn keyword rustTrait Hash
7979
syn keyword rustTrait FromStr
8080
syn keyword rustTrait FromIterator Extendable
81-
syn keyword rustTrait Iterator DoubleEndedIterator RandomAccessIterator CloneableIterator
81+
syn keyword rustTrait Iterator DoubleEndedIterator RandomAccessIterator ClonableIterator
8282
syn keyword rustTrait OrdIterator MutableDoubleEndedIterator ExactSize
8383
syn keyword rustTrait Times
8484

branches/dist-snap/src/gyp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Subproject commit 1e46da1000bc29679ab4cebf3c1034cb7d6f4487
1+
Subproject commit f407f09c94e00d2d570e8e42114e3f6848b2deb2

branches/dist-snap/src/libextra/enum_set.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
//! This module defines a container which uses an efficient bit mask
1414
//! representation to hold C-like enum variants.
1515
16-
#[deriving(Clone, Eq, IterBytes, ToStr, Encodable, Decodable)]
16+
#[deriving(Clone, Eq, IterBytes, ToStr)]
1717
/// A specialized Set implementation to use enum types.
1818
pub struct EnumSet<E> {
1919
// We must maintain the invariant that no bits are set

branches/dist-snap/src/libgreen/lib.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,11 @@ impl SchedPool {
214214
pool.handles.push(sched.make_handle());
215215
let sched = sched;
216216
pool.threads.push(do Thread::start {
217-
sched.bootstrap();
217+
let mut sched = sched;
218+
let task = do GreenTask::new(&mut sched.stack_pool, None) {
219+
rtdebug!("boostraping a non-primary scheduler");
220+
};
221+
sched.bootstrap(task);
218222
});
219223
}
220224

@@ -266,7 +270,13 @@ impl SchedPool {
266270
let ret = sched.make_handle();
267271
self.handles.push(sched.make_handle());
268272
let sched = sched;
269-
self.threads.push(do Thread::start { sched.bootstrap() });
273+
self.threads.push(do Thread::start {
274+
let mut sched = sched;
275+
let task = do GreenTask::new(&mut sched.stack_pool, None) {
276+
rtdebug!("boostraping a non-primary scheduler");
277+
};
278+
sched.bootstrap(task);
279+
});
270280

271281
return ret;
272282
}

branches/dist-snap/src/libgreen/sched.rs

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ impl Scheduler {
171171

172172
// Take a main task to run, and a scheduler to run it in. Create a
173173
// scheduler task and bootstrap into it.
174-
pub fn bootstrap(mut ~self) {
174+
pub fn bootstrap(mut ~self, task: ~GreenTask) {
175175

176176
// Build an Idle callback.
177177
let cb = ~SchedRunner as ~Callback;
@@ -187,11 +187,18 @@ impl Scheduler {
187187
self.idle_callback.get_mut_ref().resume();
188188

189189
// Now, as far as all the scheduler state is concerned, we are inside
190-
// the "scheduler" context. The scheduler immediately hands over control
191-
// to the event loop, and this will only exit once the event loop no
192-
// longer has any references (handles or I/O objects).
193-
rtdebug!("starting scheduler {}", self.sched_id());
194-
let mut sched_task = self.run(sched_task);
190+
// the "scheduler" context. So we can act like the scheduler and resume
191+
// the provided task. Let it think that the currently running task is
192+
// actually the sched_task so it knows where to squirrel it away.
193+
let mut sched_task = self.resume_task_immediately(sched_task, task);
194+
195+
// Now we are back in the scheduler context, having
196+
// successfully run the input task. Start by running the
197+
// scheduler. Grab it out of TLS - performing the scheduler
198+
// action will have given it away.
199+
let sched = sched_task.sched.take_unwrap();
200+
rtdebug!("starting scheduler {}", sched.sched_id());
201+
let mut sched_task = sched.run(sched_task);
195202

196203
// Close the idle callback.
197204
let mut sched = sched_task.sched.take_unwrap();
@@ -541,10 +548,7 @@ impl Scheduler {
541548
// We push the task onto our local queue clone.
542549
assert!(!task.is_sched());
543550
self.work_queue.push(task);
544-
match self.idle_callback {
545-
Some(ref mut idle) => idle.resume(),
546-
None => {} // allow enqueuing before the scheduler starts
547-
}
551+
self.idle_callback.get_mut_ref().resume();
548552

549553
// We've made work available. Notify a
550554
// sleeping scheduler.
@@ -1172,21 +1176,25 @@ mod test {
11721176
let mut sh = special_handle;
11731177
sh.send(Shutdown);
11741178
};
1175-
normal_sched.enqueue_task(normal_task);
1179+
11761180

11771181
let special_task = do GreenTask::new(&mut special_sched.stack_pool,
11781182
None) {
11791183
run(task1);
11801184
run(task3);
11811185
chan.send(());
11821186
};
1183-
special_sched.enqueue_task(special_task);
1187+
11841188

11851189
let normal_sched = normal_sched;
1186-
let normal_thread = do Thread::start { normal_sched.bootstrap() };
1190+
let normal_thread = do Thread::start {
1191+
normal_sched.bootstrap(normal_task);
1192+
};
11871193

11881194
let special_sched = special_sched;
1189-
let special_thread = do Thread::start { special_sched.bootstrap() };
1195+
let special_thread = do Thread::start {
1196+
special_sched.bootstrap(special_task);
1197+
};
11901198

11911199
normal_thread.join();
11921200
special_thread.join();

branches/dist-snap/src/libnative/io/file.rs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use super::IoResult;
2626
#[cfg(windows)] use std::ptr;
2727
#[cfg(windows)] use std::str;
2828

29-
pub fn keep_going(data: &[u8], f: |*u8, uint| -> i64) -> i64 {
29+
fn keep_going(data: &[u8], f: |*u8, uint| -> i64) -> i64 {
3030
#[cfg(windows)] static eintr: int = 0; // doesn't matter
3131
#[cfg(not(windows))] static eintr: int = libc::EINTR as int;
3232

@@ -37,7 +37,7 @@ pub fn keep_going(data: &[u8], f: |*u8, uint| -> i64) -> i64 {
3737
let mut ret;
3838
loop {
3939
ret = f(data, amt);
40-
if cfg!(windows) { break } // windows has no eintr
40+
if cfg!(not(windows)) { break } // windows has no eintr
4141
// if we get an eintr, then try again
4242
if ret != -1 || os::errno() as int != eintr { break }
4343
}
@@ -73,10 +73,7 @@ impl FileDesc {
7373
FileDesc { fd: fd, close_on_drop: close_on_drop }
7474
}
7575

76-
// FIXME(#10465) these functions should not be public, but anything in
77-
// native::io wanting to use them is forced to have all the
78-
// rtio traits in scope
79-
pub fn inner_read(&mut self, buf: &mut [u8]) -> Result<uint, IoError> {
76+
fn inner_read(&mut self, buf: &mut [u8]) -> Result<uint, IoError> {
8077
#[cfg(windows)] type rlen = libc::c_uint;
8178
#[cfg(not(windows))] type rlen = libc::size_t;
8279
let ret = keep_going(buf, |buf, len| {
@@ -92,7 +89,7 @@ impl FileDesc {
9289
Ok(ret as uint)
9390
}
9491
}
95-
pub fn inner_write(&mut self, buf: &[u8]) -> Result<(), IoError> {
92+
fn inner_write(&mut self, buf: &[u8]) -> Result<(), IoError> {
9693
#[cfg(windows)] type wlen = libc::c_uint;
9794
#[cfg(not(windows))] type wlen = libc::size_t;
9895
let ret = keep_going(buf, |buf, len| {
@@ -106,8 +103,6 @@ impl FileDesc {
106103
Ok(())
107104
}
108105
}
109-
110-
pub fn fd(&self) -> fd_t { self.fd }
111106
}
112107

113108
impl io::Reader for FileDesc {

branches/dist-snap/src/libnative/io/mod.rs

Lines changed: 13 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ pub use self::process::Process;
4444
// Native I/O implementations
4545
pub mod file;
4646
pub mod process;
47-
pub mod net;
4847

4948
type IoResult<T> = Result<T, IoError>;
5049

@@ -56,25 +55,12 @@ fn unimpl() -> IoError {
5655
}
5756
}
5857

59-
fn translate_error(errno: i32, detail: bool) -> IoError {
58+
fn last_error() -> IoError {
6059
#[cfg(windows)]
6160
fn get_err(errno: i32) -> (io::IoErrorKind, &'static str) {
6261
match errno {
6362
libc::EOF => (io::EndOfFile, "end of file"),
64-
libc::WSAECONNREFUSED => (io::ConnectionRefused, "connection refused"),
65-
libc::WSAECONNRESET => (io::ConnectionReset, "connection reset"),
66-
libc::WSAEACCES => (io::PermissionDenied, "permission denied"),
67-
libc::WSAEWOULDBLOCK =>
68-
(io::ResourceUnavailable, "resource temporarily unavailable"),
69-
libc::WSAENOTCONN => (io::NotConnected, "not connected"),
70-
libc::WSAECONNABORTED => (io::ConnectionAborted, "connection aborted"),
71-
libc::WSAEADDRNOTAVAIL => (io::ConnectionRefused, "address not available"),
72-
libc::WSAEADDRINUSE => (io::ConnectionRefused, "address in use"),
73-
74-
x => {
75-
debug!("ignoring {}: {}", x, os::last_os_error());
76-
(io::OtherIoError, "unknown error")
77-
}
63+
_ => (io::OtherIoError, "unknown error"),
7864
}
7965
}
8066

@@ -83,38 +69,24 @@ fn translate_error(errno: i32, detail: bool) -> IoError {
8369
// XXX: this should probably be a bit more descriptive...
8470
match errno {
8571
libc::EOF => (io::EndOfFile, "end of file"),
86-
libc::ECONNREFUSED => (io::ConnectionRefused, "connection refused"),
87-
libc::ECONNRESET => (io::ConnectionReset, "connection reset"),
88-
libc::EPERM | libc::EACCES =>
89-
(io::PermissionDenied, "permission denied"),
90-
libc::EPIPE => (io::BrokenPipe, "broken pipe"),
91-
libc::ENOTCONN => (io::NotConnected, "not connected"),
92-
libc::ECONNABORTED => (io::ConnectionAborted, "connection aborted"),
93-
libc::EADDRNOTAVAIL => (io::ConnectionRefused, "address not available"),
94-
libc::EADDRINUSE => (io::ConnectionRefused, "address in use"),
9572

9673
// These two constants can have the same value on some systems, but
9774
// different values on others, so we can't use a match clause
9875
x if x == libc::EAGAIN || x == libc::EWOULDBLOCK =>
9976
(io::ResourceUnavailable, "resource temporarily unavailable"),
10077

101-
x => {
102-
debug!("ignoring {}: {}", x, os::last_os_error());
103-
(io::OtherIoError, "unknown error")
104-
}
78+
_ => (io::OtherIoError, "unknown error"),
10579
}
10680
}
10781

108-
let (kind, desc) = get_err(errno);
82+
let (kind, desc) = get_err(os::errno() as i32);
10983
IoError {
11084
kind: kind,
11185
desc: desc,
112-
detail: if detail {Some(os::last_os_error())} else {None},
86+
detail: Some(os::last_os_error())
11387
}
11488
}
11589

116-
fn last_error() -> IoError { translate_error(os::errno() as i32, true) }
117-
11890
// unix has nonzero values as errors
11991
fn mkerr_libc(ret: libc::c_int) -> IoResult<()> {
12092
if ret != 0 {
@@ -134,37 +106,17 @@ fn mkerr_winbool(ret: libc::c_int) -> IoResult<()> {
134106
}
135107
}
136108

137-
#[cfg(unix)]
138-
fn retry(f: || -> libc::c_int) -> IoResult<libc::c_int> {
139-
loop {
140-
match f() {
141-
-1 if os::errno() as int == libc::EINTR as int => {}
142-
-1 => return Err(last_error()),
143-
n => return Ok(n),
144-
}
145-
}
146-
}
147-
148109
/// Implementation of rt::rtio's IoFactory trait to generate handles to the
149110
/// native I/O functionality.
150-
pub struct IoFactory {
151-
priv cannot_construct_outside_of_this_module: ()
152-
}
153-
154-
impl IoFactory {
155-
pub fn new() -> IoFactory {
156-
net::init();
157-
IoFactory { cannot_construct_outside_of_this_module: () }
158-
}
159-
}
111+
pub struct IoFactory;
160112

161113
impl rtio::IoFactory for IoFactory {
162114
// networking
163-
fn tcp_connect(&mut self, addr: SocketAddr) -> IoResult<~RtioTcpStream> {
164-
net::TcpStream::connect(addr).map(|s| ~s as ~RtioTcpStream)
115+
fn tcp_connect(&mut self, _addr: SocketAddr) -> IoResult<~RtioTcpStream> {
116+
Err(unimpl())
165117
}
166-
fn tcp_bind(&mut self, addr: SocketAddr) -> IoResult<~RtioTcpListener> {
167-
net::TcpListener::bind(addr).map(|s| ~s as ~RtioTcpListener)
118+
fn tcp_bind(&mut self, _addr: SocketAddr) -> IoResult<~RtioTcpListener> {
119+
Err(unimpl())
168120
}
169121
fn udp_bind(&mut self, _addr: SocketAddr) -> IoResult<~RtioUdpSocket> {
170122
Err(unimpl())
@@ -252,7 +204,9 @@ impl rtio::IoFactory for IoFactory {
252204
}
253205
fn tty_open(&mut self, fd: c_int, _readable: bool) -> IoResult<~RtioTTY> {
254206
if unsafe { libc::isatty(fd) } != 0 {
255-
Ok(~file::FileDesc::new(fd, true) as ~RtioTTY)
207+
// Don't ever close the stdio file descriptors, nothing good really
208+
// comes of that.
209+
Ok(~file::FileDesc::new(fd, fd > libc::STDERR_FILENO) as ~RtioTTY)
256210
} else {
257211
Err(IoError {
258212
kind: io::MismatchedFileTypeForOperation,

0 commit comments

Comments
 (0)