Skip to content
Snippets Groups Projects
Commit ee20797c authored by Julian Rother's avatar Julian Rother
Browse files

Implemented job canceling

parent 17eeeac6
Branches
No related tags found
No related merge requests found
......@@ -17,7 +17,7 @@ static void copy_to_log(int fd)
int main(int argc, char *argv[])
{
int ret, errpipe[2] = {-1, -1};
int ret, canceled = 0, errpipe[2] = {-1, -1};
char *src, *dest;
pid_t pid;
struct pollfd fds = {.fd = -1, .events = POLLIN};
......@@ -48,7 +48,9 @@ int main(int argc, char *argv[])
while (1)
{
ping_job(jobid, "running", "{\"log\": \"%s\"}", jescape(get_avlogbuf()));
canceled = ping_job(jobid, "running", "{\"log\": \"%s\"}", jescape(get_avlogbuf()));
if (canceled)
kill(pid, SIGINT); /* Stop ffmpeg */
poll(&fds, 1, 15000);
if (fds.revents & POLLIN)
copy_to_log(fds.fd);
......@@ -57,7 +59,7 @@ int main(int argc, char *argv[])
}
waitpid(pid, &ret, 0);
if (!WEXITSTATUS(ret))
if (canceled && (WEXITSTATUS(ret) == 255 || (WIFSIGNALED(ret) && WTERMSIG(ret) == SIGINT)))
ping_job(jobid, "finished", "{\"log\": \"%s\"}", jescape(get_avlogbuf()));
else if (WIFSIGNALED(ret))
job_failed("Subprocesses was killed by signal %s (%i)", strsignal(WTERMSIG(ret)), WTERMSIG(ret));
......
......@@ -247,7 +247,7 @@ void connect_pads(AVFilterInOut **ins, AVFilterInOut **outs)
int main(int argc, char *argv[])
{
int err, i, progress, _progress;
int err, i, progress, _progress, canceled;
char *p, *input, *output, *inpath, *outpath, *tmppath, *oldsrcpath;
AVFormatContext *demux, *mux;
AVCodecContext **decs, **encs;
......@@ -329,14 +329,16 @@ int main(int argc, char *argv[])
progress = 0;
ping_job(jobid, "running", 0);
while (!av_read_frame(demux, &pkt))
while (!canceled && !av_read_frame(demux, &pkt))
{
i = pkt.stream_index;
_progress = av_rescale_q(pkt.pts, demux->streams[i]->time_base, AV_TIME_BASE_Q)*100/demux->duration;
if (_progress > progress || !checktime(30))
{
ping_job(jobid, "running", "{\"progress\": %i, \"log\": \"%s\"}", _progress,
canceled = ping_job(jobid, "running", "{\"progress\": %i, \"log\": \"%s\"}", _progress,
jescape(get_avlogbuf()));
if (canceled)
job_failed("Job canceled");
progress = _progress;
}
filtergraph_send(srcs[i], decs[i], &pkt);
......
......@@ -15,6 +15,7 @@ static size_t curl_write_cb(char *ptr, size_t size, size_t nmemb, void *user)
int ping_job(int id, char *state, char *status, ...)
{
int ret;
long http_status;
CURL *curl;
va_list ap;
char *p, *url, *e_host, *e_status, *e_apikey, *e_state;
......@@ -48,6 +49,7 @@ int ping_job(int id, char *state, char *status, ...)
curl_easy_setopt(curl, CURLOPT_URL, url);
ret = curl_easy_perform(curl);
free(p);
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_status);
curl_easy_cleanup(curl);
if (ret)
{
......@@ -56,5 +58,7 @@ int ping_job(int id, char *state, char *status, ...)
return -1;
}
free(url);
if (http_status == 205)
return 1; /* Job canceled */
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment