summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMole Shang <[email protected]>2023-08-08 11:08:37 +0800
committerMole Shang <[email protected]>2023-08-08 11:08:37 +0800
commitf0121e1596dc5490b58b6dad1bfb8f3b83d19b94 (patch)
tree97d23f03a6e607d2414bbc5390b926031fbe6537
parentea686558ff9d0e4a9c4ca07c1a3e79d49e5847e4 (diff)
downloadhinata-f0121e1596dc5490b58b6dad1bfb8f3b83d19b94.tar.gz
hinata-f0121e1596dc5490b58b6dad1bfb8f3b83d19b94.tar.bz2
hinata-f0121e1596dc5490b58b6dad1bfb8f3b83d19b94.zip
process_url: do not block ui thread on callback
-rw-r--r--src/extractors/bilibili.c7
-rw-r--r--src/process_url.c6
-rw-r--r--src/process_url.h2
3 files changed, 9 insertions, 6 deletions
diff --git a/src/extractors/bilibili.c b/src/extractors/bilibili.c
index 9d1ede6..f14432e 100644
--- a/src/extractors/bilibili.c
+++ b/src/extractors/bilibili.c
@@ -380,14 +380,15 @@ static void dash_cleanup(Dash *dash) {
free_array(&dash->dashinfo.dash.video);
}
-static int bilibili_merge(callback_struct_t *cb_struct) {
+static int bilibili_merge(void *v) {
+ callback_struct_t *cb_struct = (callback_struct_t *)v;
LOG("Bilibili", "Using ffmpeg to merge downloaded files ...\n");
- merge_av(cb_struct->videofn, cb_struct->audiofn, cb_struct->filename);
+ int r = merge_av(cb_struct->videofn, cb_struct->audiofn, cb_struct->filename);
free_and_nullify(cb_struct->videofn);
free_and_nullify(cb_struct->audiofn);
free_and_nullify(cb_struct->filename);
LOG("Bilibili", "All done!\n");
- return 0;
+ return r;
}
static int download(Bilibili_options *bilibili_options) {
diff --git a/src/process_url.c b/src/process_url.c
index e51da98..1bb411a 100644
--- a/src/process_url.c
+++ b/src/process_url.c
@@ -506,11 +506,13 @@ void poll_status(status_t *stat) {
}
merge_and_cleanup(curl_conf);
append_log("Download %s finished.\n", curl_conf->outfn);
+ free_and_nullify(curl_conf);
// Perform the callback
if (is_empty_queue(&dl_queue) && callback_g) {
- callback_g(p_callback_struct_g);
+ thrd_t cb_thrd;
+ thrd_create(&cb_thrd, callback_g, p_callback_struct_g);
+ thrd_detach(cb_thrd);
}
- free_and_nullify(curl_conf);
}
mtx_unlock(&mtx);
}
diff --git a/src/process_url.h b/src/process_url.h
index 5343c9e..e33d8cf 100644
--- a/src/process_url.h
+++ b/src/process_url.h
@@ -50,7 +50,7 @@ typedef struct callback_struct {
char *filename;
} callback_struct_t;
-typedef int (*callback_t)(callback_struct_t *);
+typedef int (*callback_t)(void *);
void curl_init(char *);