aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/jobs.h5
-rw-r--r--src/evanix.c10
-rw-r--r--src/jobs.c4
-rw-r--r--src/queue.c6
4 files changed, 13 insertions, 12 deletions
diff --git a/include/jobs.h b/include/jobs.h
index 37445c1..7390306 100644
--- a/include/jobs.h
+++ b/include/jobs.h
@@ -10,7 +10,7 @@ struct output {
struct job {
char *name, *drv_path, *attr;
- bool transitive;
+ bool scheduled;
bool insubstituters;
size_t outputs_size, outputs_filled;
@@ -36,7 +36,8 @@ typedef enum {
} job_read_state_t;
int job_read(FILE *stream, struct job **jobs);
-int jobs_init(FILE **stream, char *expr);
+/* Spawns nix-eval-jobs and connects its stdout to stream */
+int jobs_init(FILE **stream, const char *expr);
void job_free(struct job *j);
int job_parents_list_insert(struct job *job, struct job *parent);
void job_deps_list_rm(struct job *job, struct job *dep);
diff --git a/src/evanix.c b/src/evanix.c
index 01279d1..27ab428 100644
--- a/src/evanix.c
+++ b/src/evanix.c
@@ -33,22 +33,22 @@ static int evanix(char *expr)
{
struct queue_thread *queue_thread = NULL;
struct build_thread *build_thread = NULL;
- FILE *stream = NULL;
+ FILE *jobsStream = NULL; /* nix-eval-jobs stdout */
int ret = 0;
- ret = jobs_init(&stream, expr);
+ ret = jobs_init(&jobsStream, expr);
if (ret < 0)
goto out_free;
- ret = queue_thread_new(&queue_thread, stream);
+ ret = queue_thread_new(&queue_thread, jobsStream);
if (ret < 0) {
- free(stream);
+ free(jobsStream);
goto out_free;
}
ret = build_thread_new(&build_thread, queue_thread->queue);
if (ret < 0) {
- free(stream);
+ free(jobsStream);
goto out_free;
}
diff --git a/src/jobs.c b/src/jobs.c
index 4e3926a..7851fef 100644
--- a/src/jobs.c
+++ b/src/jobs.c
@@ -367,7 +367,7 @@ static int job_new(struct job **j, char *name, char *drv_path,
print_err("%s", strerror(errno));
return -errno;
}
- job->transitive = true;
+ job->scheduled = false;
job->outputs_size = 0;
job->outputs_filled = 0;
@@ -434,7 +434,7 @@ out_free_job:
return ret;
}
-int jobs_init(FILE **stream, char *expr)
+int jobs_init(FILE **stream, const char *expr)
{
size_t argindex;
char *args[6];
diff --git a/src/queue.c b/src/queue.c
index 09eebb6..3a7ca52 100644
--- a/src/queue.c
+++ b/src/queue.c
@@ -41,7 +41,7 @@ static int queue_dag_isolate(struct job *job, struct job *keep_parent,
job->parents_filled = 0;
}
- if (!job->transitive)
+ if (job->scheduled)
CIRCLEQ_REMOVE(jobs, job, clist);
ret = htab_delete(htab, job->drv_path);
@@ -169,8 +169,8 @@ static int queue_push(struct queue *queue, struct job *job)
}
/* no duplicate entries in queue */
- if (job->transitive) {
- job->transitive = false;
+ if (!job->scheduled) {
+ job->scheduled = true;
CIRCLEQ_INSERT_TAIL(&queue->jobs, job, clist);
}
pthread_mutex_unlock(&queue->mutex);