@@ -58,10 +58,18 @@ pub trait Server: Send + Clone {
58
58
let mut time_start = time_start;
59
59
let mut stream = BufferedStream :: new ( stream) ;
60
60
debug ! ( "accepted connection" ) ;
61
+ let mut first = true ;
61
62
loop { // A keep-alive loop, condition at end
62
- let time_spawned = precise_time_ns ( ) ;
63
+ let mut time_spawned = precise_time_ns ( ) ;
63
64
let ( request, err_status) = Request :: load ( & mut stream) ;
64
65
let time_request_made = precise_time_ns ( ) ;
66
+ if !first {
67
+ // Subsequent requests on this connection have no spawn time.
68
+ // Moreover we cannot detect the time spent parsing the request as we have
69
+ // not exposed the time when the first byte was received.
70
+ time_start = time_request_made;
71
+ time_spawned = time_request_made;
72
+ }
65
73
let mut response = box ResponseWriter :: new ( & mut stream, request) ;
66
74
let time_response_made = precise_time_ns ( ) ;
67
75
match err_status {
@@ -102,12 +110,10 @@ pub trait Server: Send + Clone {
102
110
let time_finished = precise_time_ns ( ) ;
103
111
child_perf_sender. send ( ( time_start, time_spawned, time_request_made, time_response_made, time_finished) ) ;
104
112
105
- // Subsequent requests on this connection have no spawn time
106
- time_start = time_finished;
107
-
108
113
if request. close_connection {
109
114
break ;
110
115
}
116
+ first = false ;
111
117
}
112
118
} ) ;
113
119
}
0 commit comments