rz_core_task_join: Return true on join (#4474)
This commit is contained in:
parent
57f1070726
commit
2efd34a305
3 changed files with 17 additions and 9 deletions
|
|
@ -83,29 +83,33 @@ RZ_API int rz_core_task_running_tasks_count(RzCoreTaskScheduler *scheduler) {
|
|||
return count;
|
||||
}
|
||||
|
||||
static void task_join(RzCoreTask *task) {
|
||||
static bool task_join(RzCoreTask *task) {
|
||||
RzThreadSemaphore *sem = task->running_sem;
|
||||
if (!sem) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
rz_th_sem_wait(sem);
|
||||
rz_th_sem_post(sem);
|
||||
return true;
|
||||
}
|
||||
|
||||
RZ_API void rz_core_task_join(RzCoreTaskScheduler *scheduler, RzCoreTask *current, int id) {
|
||||
RZ_API bool rz_core_task_join(RzCoreTaskScheduler *scheduler, RzCoreTask *current, int id) {
|
||||
bool ret = true;
|
||||
if (current && id == current->id) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
if (id >= 0) {
|
||||
RzCoreTask *task = rz_core_task_get_incref(scheduler, id);
|
||||
if (!task) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
if (current) {
|
||||
rz_core_task_sleep_begin(current);
|
||||
}
|
||||
task_join(task);
|
||||
if (!task_join(task)) {
|
||||
ret = false;
|
||||
}
|
||||
if (current) {
|
||||
rz_core_task_sleep_end(current);
|
||||
}
|
||||
|
|
@ -131,7 +135,9 @@ RZ_API void rz_core_task_join(RzCoreTaskScheduler *scheduler, RzCoreTask *curren
|
|||
if (current) {
|
||||
rz_core_task_sleep_begin(current);
|
||||
}
|
||||
task_join(task);
|
||||
if (!task_join(task)) {
|
||||
ret = false;
|
||||
}
|
||||
if (current) {
|
||||
rz_core_task_sleep_end(current);
|
||||
}
|
||||
|
|
@ -139,6 +145,7 @@ RZ_API void rz_core_task_join(RzCoreTaskScheduler *scheduler, RzCoreTask *curren
|
|||
}
|
||||
rz_list_free(tasks);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void task_free(RzCoreTask *task) {
|
||||
|
|
|
|||
|
|
@ -1191,7 +1191,7 @@ RZ_API void rz_core_task_break(RzCoreTaskScheduler *scheduler, int id);
|
|||
RZ_API void rz_core_task_break_all(RzCoreTaskScheduler *scheduler);
|
||||
RZ_API int rz_core_task_del(RzCoreTaskScheduler *scheduler, int id);
|
||||
RZ_API RzCoreTask *rz_core_task_self(RzCoreTaskScheduler *scheduler);
|
||||
RZ_API void rz_core_task_join(RzCoreTaskScheduler *scheduler, RzCoreTask *current, int id);
|
||||
RZ_API bool rz_core_task_join(RzCoreTaskScheduler *scheduler, RzCoreTask *current, int id);
|
||||
typedef void (*inRangeCb)(RzCore *core, ut64 from, ut64 to, int vsize, void *cb_user);
|
||||
RZ_API int rz_core_search_value_in_range(RzCore *core, RzInterval search_itv,
|
||||
ut64 vmin, ut64 vmax, int vsize, inRangeCb cb, void *cb_user);
|
||||
|
|
|
|||
|
|
@ -69,7 +69,8 @@ static bool test_core_task_finished_cb(void) {
|
|||
RzCoreTask *a = rz_core_cmd_task_new(core, "echo amor; echo vincit; echo omnia", finished_cb, &res_indir);
|
||||
rz_core_task_enqueue(&core->tasks, a);
|
||||
|
||||
rz_core_task_join(&core->tasks, rz_core_task_self(&core->tasks), a->id);
|
||||
bool task_joined = rz_core_task_join(&core->tasks, rz_core_task_self(&core->tasks), a->id);
|
||||
mu_assert_true(task_joined, "task joined");
|
||||
|
||||
const char *cmd_result = rz_core_cmd_task_get_result(a);
|
||||
mu_assert_streq(cmd_result, "amor\nvincit\nomnia\n", "cmd result");
|
||||
|
|
|
|||
Loading…
Reference in a new issue