/*
* Indicate job completion
*/
- int (*signal_fn)(int jobid, void *private_data);
- void *signal_private_data;
+ int (*signal_fn)(int jobid,
+ void (*job_fn)(void *private_data),
+ void *job_fn_private_data,
+ void *private_data);
+ void *signal_fn_private_data;
/*
* indicator to worker threads that they should shut down
*/
int pthreadpool_init(unsigned max_threads, struct pthreadpool **presult,
- int (*signal_fn)(int jobid, void *private_data),
- void *signal_private_data)
+ int (*signal_fn)(int jobid,
+ void (*job_fn)(void *private_data),
+ void *job_fn_private_data,
+ void *private_data),
+ void *signal_fn_private_data)
{
struct pthreadpool *pool;
int ret;
return ENOMEM;
}
pool->signal_fn = signal_fn;
- pool->signal_private_data = signal_private_data;
+ pool->signal_fn_private_data = signal_fn_private_data;
pool->jobs_array_len = 4;
pool->jobs = calloc(
assert(res == 0);
ret = pool->signal_fn(job.id,
- pool->signal_private_data);
+ job.fn, job.private_data,
+ pool->signal_fn_private_data);
if (ret != 0) {
pthreadpool_server_exit(pool);
pthread_mutex_unlock(&pool->mutex);
* care to not overload the system.
*/
int pthreadpool_init(unsigned max_threads, struct pthreadpool **presult,
- int (*signal_fn)(int jobid, void *private_data),
- void *signal_private_data);
+ int (*signal_fn)(int jobid,
+ void (*job_fn)(void *private_data),
+ void *job_fn_private_data,
+ void *private_data),
+ void *signal_fn_private_data);
/**
* @brief Destroy a pthreadpool
int pipe_fds[2];
};
-static int pthreadpool_pipe_signal(int jobid, void *private_data);
+static int pthreadpool_pipe_signal(int jobid,
+ void (*job_fn)(void *private_data),
+ void *job_private_data,
+ void *private_data);
int pthreadpool_pipe_init(unsigned max_threads,
struct pthreadpool_pipe **presult)
return 0;
}
-static int pthreadpool_pipe_signal(int jobid, void *private_data)
+static int pthreadpool_pipe_signal(int jobid,
+ void (*job_fn)(void *private_data),
+ void *job_private_data,
+ void *private_data)
{
struct pthreadpool_pipe *pool = private_data;
ssize_t written;
* Indicate job completion
*/
int (*signal_fn)(int jobid,
+ void (*job_fn)(void *private_data),
+ void *job_fn_private_data,
void *private_data);
- void *signal_private_data;
+ void *signal_fn_private_data;
};
int pthreadpool_init(unsigned max_threads, struct pthreadpool **presult,
int (*signal_fn)(int jobid,
+ void (*job_fn)(void *private_data),
+ void *job_fn_private_data,
void *private_data),
- void *signal_private_data)
+ void *signal_fn_private_data)
{
struct pthreadpool *pool;
return ENOMEM;
}
pool->signal_fn = signal_fn;
- pool->signal_private_data = signal_private_data;
+ pool->signal_fn_private_data = signal_fn_private_data;
*presult = pool;
return 0;
{
fn(private_data);
- return pool->signal_fn(job_id, pool->signal_private_data);
+ return pool->signal_fn(job_id, fn, private_data,
+ pool->signal_fn_private_data);
}
int pthreadpool_destroy(struct pthreadpool *pool)