diff --git a/inc/mthread/mthread.h b/inc/mthread/mthread.h index 2e76942fac27e11ccadcec1b954f95a8de84f264..cef1aa21e938592721d142f15b4807049d2dc529 100644 --- a/inc/mthread/mthread.h +++ b/inc/mthread/mthread.h @@ -48,7 +48,7 @@ typedef struct mthread_sem_s mthread_sem_t; /* Function for handling threads. */ -int mthread_create(mthread_t *__threadp, const mthread_attr_t *__attr, void *(*__start_routine) (void *), void *__arg); +int mthread_create(mthread_t *__threadp, const mthread_attr_t __attr, void *(*__start_routine) (void *), void *__arg); mthread_t mthread_self(void); int mthread_equal (mthread_t __thread1, mthread_t __thread2); diff --git a/src/mthread/mthread.c b/src/mthread/mthread.c index 78c9dabc8e08f30220df99467c8cbe5d282729b7..560a0fc326bd78d0e3efdb4f0a5a2883f95f4fb2 100644 --- a/src/mthread/mthread.c +++ b/src/mthread/mthread.c @@ -290,7 +290,7 @@ mthread_init(void) if ATTR is NULL), and call function START_ROUTINE with given arguments ARG. */ int -mthread_create(mthread_t *__threadp, const mthread_attr_t *__attr, void *(*__start_routine) (void *), void *__arg) +mthread_create(mthread_t *__threadp, const mthread_attr_t __attr, void *(*__start_routine) (void *), void *__arg) { if (is_mthread_init == 0) { __mthread_lib_init(0); @@ -309,9 +309,9 @@ mthread_create(mthread_t *__threadp, const mthread_attr_t *__attr, void *(*__sta mthread_init_thread(mctx); if (__attr) { - if (*__attr & ATTR_DETACHED) + if (__attr & ATTR_DETACHED) mctx->detached = DETACHED; - if (*__attr & ATTR_DETACHED_FREE) + if (__attr & ATTR_DETACHED_FREE) mctx->detached = DETACHED_FREE; } diff --git a/src/repo/downloader.c b/src/repo/downloader.c index 0ae589a7b0da445c6f5763aa6435486ba69d505e..d6ad28e13f245418d9870ca5123554719770b0f6 100644 --- a/src/repo/downloader.c +++ b/src/repo/downloader.c @@ -9,7 +9,7 @@ #include <mthread/mthread.h> #include <lektor/macro.h> #include <lektor/repo.h> -#include <lektor/thread.h> +#include <lektor/database.h> /* Find it in the repo/curl.c file. FIXME */ extern int @@ -49,7 +49,13 @@ repo_download_id_async(struct lkt_repo *const repo, const size_t id) kara->id = id; /* Thread */ - return mthread_create(th, NULL, __repo_download_id_async, arg); + mthread_t *th = calloc(1, sizeof(mthread_t)); + if (!th) { + free(arg); + LOG_ERROR_SCT("REPO", "%s", "Out of memory"); + return 1; + } + return mthread_create(th, ATTR_DETACHED_FREE, __repo_download_id_async, arg); } /* Get all the kara, make them unavailable */ @@ -96,7 +102,7 @@ __handle_got_json(volatile sqlite3 *db, struct lkt_repo *repo, struct json_objec if (safe_json_get_int32(kara_json, "song_number", &kara->mdt.song_number)) goto err; - if (database_update_add(db, kara->filename, &kara->mdt, kara->id, false)) + if (database_update_add((sqlite3 *) db, kara->filename, &kara->mdt, kara->id, false)) LOG_ERROR_SCT("REPO", "Could not add unavailable kara %ld to db", kara->id); goto err; } @@ -119,5 +125,10 @@ __repo_get_all_id_async(void *arg) inline int repo_get_allid_async(struct lkt_repo *const repo) { - return mthread_create(th, NULL, __repo_get_all_id_async, repo); + mthread_t *th = calloc(1, sizeof(mthread_t)); + if (!th) { + LOG_ERROR_SCT("REPO", "%s", "Out of memory"); + return 1; + } + return mthread_create(th, ATTR_DETACHED_FREE, __repo_get_all_id_async, repo); }