diff options
| author | Eric Holk <eric.holk@gmail.com> | 2012-08-07 16:54:00 -0700 |
|---|---|---|
| committer | Eric Holk <eric.holk@gmail.com> | 2012-08-08 10:28:57 -0700 |
| commit | c5fbff01ce2b3e2d3020182891d4a22b8958f7f3 (patch) | |
| tree | 53dff681944384e68ba71854289ae124f8389d58 /src | |
| parent | bc6ba6b09174fdd1feaee1ce011572ba6eb1986a (diff) | |
| download | rust-c5fbff01ce2b3e2d3020182891d4a22b8958f7f3.tar.gz rust-c5fbff01ce2b3e2d3020182891d4a22b8958f7f3.zip | |
Add a really optimistic fast path in receive. Gives about a 7% performance improvement in msgsend-ring-pipes
Diffstat (limited to 'src')
| -rw-r--r-- | src/libcore/pipes.rs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/libcore/pipes.rs b/src/libcore/pipes.rs index 0d684a99cba..c72a777c0a8 100644 --- a/src/libcore/pipes.rs +++ b/src/libcore/pipes.rs @@ -395,6 +395,20 @@ fn try_recv<T: send, Tbuffer: send>(-p: recv_packet_buffered<T, Tbuffer>) { let p_ = p.unwrap(); let p = unsafe { &*p_ }; + + // optimistic path + match p.header.state { + full => { + let mut payload = none; + payload <-> p.payload; + p.header.state = empty; + return some(option::unwrap(payload)) + }, + terminated => return none, + _ => {} + } + + // regular path let this = rustrt::rust_get_task(); rustrt::task_clear_event_reject(this); rustrt::rust_task_ref(this); |
