version 1.76, 2015/08/28 10:06:52 |
version 1.77, 2015/08/28 11:38:27 |
|
|
|
|
void format_job_callback(struct job *); |
void format_job_callback(struct job *); |
const char *format_job_get(struct format_tree *, const char *); |
const char *format_job_get(struct format_tree *, const char *); |
|
void format_job_timer(int, short, void *); |
|
|
int format_replace(struct format_tree *, const char *, size_t, char **, |
int format_replace(struct format_tree *, const char *, size_t, char **, |
size_t *, size_t *); |
size_t *, size_t *); |
|
|
}; |
}; |
|
|
/* Format job tree. */ |
/* Format job tree. */ |
|
struct event format_job_event; |
int format_job_cmp(struct format_job *, struct format_job *); |
int format_job_cmp(struct format_job *, struct format_job *); |
RB_HEAD(format_job_tree, format_job) format_jobs = RB_INITIALIZER(); |
RB_HEAD(format_job_tree, format_job) format_jobs = RB_INITIALIZER(); |
RB_PROTOTYPE(format_job_tree, format_job, entry, format_job_cmp); |
RB_PROTOTYPE(format_job_tree, format_job, entry, format_job_cmp); |
|
|
server_status_client(c); |
server_status_client(c); |
fj->status = 0; |
fj->status = 0; |
} |
} |
|
|
|
log_debug("%s: %s: %s", __func__, fj->cmd, fj->out); |
} |
} |
|
|
/* Find a job. */ |
/* Find a job. */ |
|
|
|
|
/* Remove old jobs. */ |
/* Remove old jobs. */ |
void |
void |
format_clean(void) |
format_job_timer(unused int fd, unused short events, unused void *arg) |
{ |
{ |
struct format_job *fj, *fj1; |
struct format_job *fj, *fj1; |
time_t now; |
time_t now; |
|
struct timeval tv = { .tv_sec = 60 }; |
|
|
now = time(NULL); |
now = time(NULL); |
RB_FOREACH_SAFE(fj, format_job_tree, &format_jobs, fj1) { |
RB_FOREACH_SAFE(fj, format_job_tree, &format_jobs, fj1) { |
|
|
continue; |
continue; |
RB_REMOVE(format_job_tree, &format_jobs, fj); |
RB_REMOVE(format_job_tree, &format_jobs, fj); |
|
|
|
log_debug("%s: %s", __func__, fj->cmd); |
|
|
if (fj->job != NULL) |
if (fj->job != NULL) |
job_free(fj->job); |
job_free(fj->job); |
|
|
|
|
|
|
free(fj); |
free(fj); |
} |
} |
|
|
|
evtimer_del(&format_job_event); |
|
evtimer_add(&format_job_event, &tv); |
} |
} |
|
|
/* Create a new tree. */ |
/* Create a new tree. */ |
|
|
{ |
{ |
struct format_tree *ft; |
struct format_tree *ft; |
char host[HOST_NAME_MAX + 1], *ptr; |
char host[HOST_NAME_MAX + 1], *ptr; |
|
|
|
if (!event_initialized(&format_job_event)) { |
|
evtimer_set(&format_job_event, format_job_timer, NULL); |
|
format_job_timer(-1, 0, NULL); |
|
} |
|
|
ft = xcalloc(1, sizeof *ft); |
ft = xcalloc(1, sizeof *ft); |
RB_INIT(&ft->tree); |
RB_INIT(&ft->tree); |