| Index: src/d8-posix.cc
|
| ===================================================================
|
| --- src/d8-posix.cc (revision 1674)
|
| +++ src/d8-posix.cc (working copy)
|
| @@ -105,17 +105,17 @@
|
| // Returns false on timeout, true on data ready.
|
| static bool WaitOnFD(int fd,
|
| int read_timeout,
|
| - int* total_timeout,
|
| + int total_timeout,
|
| struct timeval& start_time) {
|
| fd_set readfds, writefds, exceptfds;
|
| struct timeval timeout;
|
| - if (*total_timeout != -1) {
|
| + int gone = 0;
|
| + if (total_timeout != -1) {
|
| struct timeval time_now;
|
| gettimeofday(&time_now, NULL);
|
| int seconds = time_now.tv_sec - start_time.tv_sec;
|
| - int gone = seconds * 1000 + (time_now.tv_usec - start_time.tv_usec) / 1000;
|
| - if (gone >= *total_timeout) return false;
|
| - *total_timeout -= gone;
|
| + gone = seconds * 1000 + (time_now.tv_usec - start_time.tv_usec) / 1000;
|
| + if (gone >= total_timeout) return false;
|
| }
|
| FD_ZERO(&readfds);
|
| FD_ZERO(&writefds);
|
| @@ -123,8 +123,8 @@
|
| FD_SET(fd, &readfds);
|
| FD_SET(fd, &exceptfds);
|
| if (read_timeout == -1 ||
|
| - (*total_timeout != -1 && *total_timeout < read_timeout)) {
|
| - read_timeout = *total_timeout;
|
| + (total_timeout != -1 && total_timeout - gone < read_timeout)) {
|
| + read_timeout = total_timeout - gone;
|
| }
|
| timeout.tv_usec = (read_timeout % 1000) * 1000;
|
| timeout.tv_sec = read_timeout / 1000;
|
| @@ -306,7 +306,7 @@
|
| static Handle<Value> GetStdout(int child_fd,
|
| struct timeval& start_time,
|
| int read_timeout,
|
| - int* total_timeout) {
|
| + int total_timeout) {
|
| Handle<String> accumulator = String::Empty();
|
| const char* source = "function(a, b) { return a + b; }";
|
| Handle<Value> cons_as_obj(Script::Compile(String::New(source))->Run());
|
| @@ -332,7 +332,7 @@
|
| read_timeout,
|
| total_timeout,
|
| start_time) ||
|
| - (TimeIsOut(start_time, *total_timeout))) {
|
| + (TimeIsOut(start_time, total_timeout))) {
|
| return ThrowException(String::New("Timed out waiting for output"));
|
| }
|
| continue;
|
| @@ -502,7 +502,7 @@
|
| Handle<Value> accumulator = GetStdout(stdout_fds[kReadFD],
|
| start_time,
|
| read_timeout,
|
| - &total_timeout);
|
| + total_timeout);
|
| if (accumulator->IsUndefined()) {
|
| kill(pid, SIGINT); // On timeout, kill the subprocess.
|
| return accumulator;
|
|
|