Skip to content

Commit 83c508b

Browse files
authored
Use correct timeout
Fixes #46
1 parent fd7f02a commit 83c508b

File tree

5 files changed

+12
-17
lines changed

5 files changed

+12
-17
lines changed

src/engine.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -214,13 +214,13 @@ static void engine_parse_cmd(const char *cmd, str_t *cwd, str_t *run, str_t **ar
214214
vec_push(*args, str_init_from(token));
215215
}
216216

217-
Engine engine_init(Worker *w, const char *cmd, const char *name, const str_t *options) {
217+
Engine engine_init(Worker *w, const char *cmd, const char *name, const str_t *options,
218+
int64_t timeOut) {
218219
if (!*cmd)
219220
DIE("[%d] missing command to start engine.\n", w->id);
220221

221-
Engine e = {
222-
.name = str_init_from_c(*name ? name : cmd) // default value
223-
};
222+
Engine e = {.name = str_init_from_c(*name ? name : cmd), // default value
223+
.timeOut = timeOut};
224224

225225
// Parse cmd into (cwd, run, args): we want to execute run from cwd with args.
226226
scope(str_destroy) str_t cwd = str_init(), run = str_init();

src/engine.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ typedef struct {
4545
int64_t time;
4646
} Info;
4747

48-
Engine engine_init(Worker *w, const char *cmd, const char *name, const str_t *options);
48+
Engine engine_init(Worker *w, const char *cmd, const char *name, const str_t *options,
49+
int64_t timeOut);
4950
void engine_destroy(Worker *w, Engine *e);
5051

5152
void engine_readln(const Worker *w, const Engine *e, str_t *line);

src/main.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,12 @@ static void *thread_start(void *arg) {
9595
for (int i = 0; i < 2; i++)
9696
if (job.ei[i] != ei[i]) {
9797
ei[i] = job.ei[i];
98-
engines[i].timeOut = eo[ei[i]].timeOut;
9998

10099
if (engines[i].in)
101100
engine_destroy(w, &engines[i]);
102101

103-
engines[i] =
104-
engine_init(w, eo[ei[i]].cmd.buf, eo[ei[i]].name.buf, eo[ei[i]].options);
102+
engines[i] = engine_init(w, eo[ei[i]].cmd.buf, eo[ei[i]].name.buf,
103+
eo[ei[i]].options, eo[ei[i]].timeOut);
105104
job_queue_set_name(&jq, ei[i], engines[i].name.buf);
106105
}
107106

@@ -196,7 +195,7 @@ int main(int argc, const char **argv) {
196195
// are likely to face a completely unresponsive engine, where any attempt at I/O will block
197196
// the master thread, on top of the already blocked worker. Hence, we must DIE().
198197
for (int i = 0; i < options.concurrency; i++)
199-
if (deadline_overdue(&Workers[i]) > 1000)
198+
if (deadline_overdue(&Workers[i]))
200199
DIE("[%d] engine %s is unresponsive\n", Workers[i].id,
201200
Workers[i].deadline.engineName.buf);
202201
} while (!job_queue_done(&jq));

src/workers.c

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,20 +47,15 @@ void deadline_clear(Worker *w) {
4747
pthread_mutex_unlock(&w->deadline.mtx);
4848
}
4949

50-
int64_t deadline_overdue(Worker *w) {
50+
bool deadline_overdue(Worker *w) {
5151
pthread_mutex_lock(&w->deadline.mtx);
5252

5353
const int64_t timeLimit = w->deadline.timeLimit;
5454
const bool set = w->deadline.set;
5555

5656
pthread_mutex_unlock(&w->deadline.mtx);
5757

58-
const int64_t time = system_msec();
59-
60-
if (set && time > timeLimit)
61-
return time - timeLimit;
62-
else
63-
return 0;
58+
return set && system_msec() > timeLimit;
6459
}
6560

6661
Worker worker_init(int i, const char *logName) {

src/workers.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ void worker_destroy(Worker *w);
4242

4343
void deadline_set(Worker *w, const char *engineName, int64_t timeLimit);
4444
void deadline_clear(Worker *w);
45-
int64_t deadline_overdue(Worker *w);
45+
bool deadline_overdue(Worker *w);
4646

4747
void workers_busy_add(int n);
4848
int workers_busy_count(void);

0 commit comments

Comments
 (0)