summaryrefslogtreecommitdiff
path: root/src/thread/thread_submit.c
blob: fd332b62d67a6aa19d820dfd8eaf7d982073e0ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#ifdef USE_THREAD

#include <tinyff/thread/thread.h>
#include <bridges/pthread/thread_bridge.h>
#include <tinyff/result.h>

ff_result ff_thread_submit(ff_ctx *ctx, ff_job_cb callback, void *arg) {
    if (!ctx || !callback) return FF_RESULT_ERROR_NULL_PTR;

    ff_thread_job *job = ctx->allocator.ff_alloc(sizeof(ff_thread_job));
    if (!job) return FF_RESULT_ERROR_MEMORY_ALLOCATION;

    job->callback = callback;
    job->arg = arg;
    job->ctx = ctx;

    pthread_t t = run_job_in_thread(job);
    if ((pthread_t)0 == t) {
        // failed to create thread
        ctx->allocator.ff_free(job);
        return FF_RESULT_WARN_NO_IMPL; // thread creation failed
    }

    return FF_RESULT_OK;
}

#endif