+/**
+ * Run a asynchronous job represented by 'callback'
+ * with the 'timeout' but only returns after job completion.
+ * @param timeout The maximum execution time in seconds of the job
+ * or 0 for unlimited time.
+ * @param callback The function to execute for achieving the job.
+ * Its first parameter is either 0 on normal flow
+ * or the signal number that broke the normal flow.
+ * @return 0 in case of success or -1 in case of error
+ */
+int jobs_invoke0(
+ int timeout,
+ void (*callback)(int signum))
+{
+ return jobs_invoke3(timeout, (job_cb_t)callback, NULL, NULL, NULL);
+}
+
+/**
+ * Run a asynchronous job represented by 'callback' and 'arg1'
+ * with the 'timeout' but only returns after job completion.
+ * @param timeout The maximum execution time in seconds of the job
+ * or 0 for unlimited time.
+ * @param callback The function to execute for achieving the job.
+ * Its first parameter is either 0 on normal flow
+ * or the signal number that broke the normal flow.
+ * The remaining parameter is the parameter 'arg1'
+ * given here.
+ * @param arg1 The second argument for 'callback'
+ * @return 0 in case of success or -1 in case of error
+ */
+int jobs_invoke(
+ int timeout,
+ void (*callback)(int, void*),
+ void *arg)
+{
+ return jobs_invoke3(timeout, (job_cb_t)callback, arg, NULL, NULL);
+}
+
+/**
+ * Run a asynchronous job represented by 'callback' and 'arg[12]'
+ * with the 'timeout' but only returns after job completion.
+ * @param timeout The maximum execution time in seconds of the job
+ * or 0 for unlimited time.
+ * @param callback The function to execute for achieving the job.
+ * Its first parameter is either 0 on normal flow
+ * or the signal number that broke the normal flow.
+ * The remaining parameters are the parameters 'arg[12]'
+ * given here.
+ * @param arg1 The second argument for 'callback'
+ * @param arg2 The third argument for 'callback'
+ * @return 0 in case of success or -1 in case of error
+ */
+int jobs_invoke2(
+ int timeout,
+ void (*callback)(int, void*, void*),
+ void *arg1,
+ void *arg2)
+{
+ return jobs_invoke3(timeout, (job_cb_t)callback, arg1, arg2, NULL);
+}
+
+/**
+ * Stops the thread pointed by 'arg1'. Used with
+ * invoke familly to return to the caller after completion.
+ * @param signum Unused
+ * @param arg1 The thread to stop
+ * @param arg2 Unused
+ * @param arg3 Unused
+ */
+static void unlock_invoker(int signum, void *arg1, void *arg2, void *arg3)