X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;ds=sidebyside;f=task-utils.c;h=12b00027a2bae479f130252b501cd1dfd5104727;hb=188a2997e0c96422498034daf2ebbb4fa8892897;hp=0390a69f9b9942f26a2cdab0b1d2203e6d82fa9a;hpb=73e211a7a8ff3d2395783daaed71bf3792bd753f;p=platform%2Fupstream%2Fbtrfs-progs.git diff --git a/task-utils.c b/task-utils.c index 0390a69..12b0002 100644 --- a/task-utils.c +++ b/task-utils.c @@ -51,7 +51,7 @@ int task_start(struct task_info *info) info->private_data); if (ret) - info->id = -1; + info->id = 0; return ret; } @@ -61,12 +61,15 @@ void task_stop(struct task_info *info) if (!info) return; - if (info->periodic.timer_fd) - close(info->periodic.timer_fd); - if (info->id > 0) { pthread_cancel(info->id); pthread_join(info->id, NULL); + info->id = 0; + } + + if (info->periodic.timer_fd) { + close(info->periodic.timer_fd); + info->periodic.timer_fd = 0; } if (info->postfn) @@ -91,8 +94,10 @@ int task_period_start(struct task_info *info, unsigned int period_ms) return -1; info->periodic.timer_fd = timerfd_create(CLOCK_MONOTONIC, 0); - if (info->periodic.timer_fd == -1) + if (info->periodic.timer_fd == -1) { + info->periodic.timer_fd = 0; return info->periodic.timer_fd; + } info->periodic.wakeups_missed = 0; @@ -114,6 +119,9 @@ void task_period_wait(struct task_info *info) if (!info) return; + if (info->periodic.timer_fd == 0) + return; + ret = read(info->periodic.timer_fd, &missed, sizeof (missed)); if (ret == -1) return; @@ -130,5 +138,6 @@ void task_period_stop(struct task_info *info) if (info->periodic.timer_fd) { timerfd_settime(info->periodic.timer_fd, 0, NULL, NULL); close(info->periodic.timer_fd); + info->periodic.timer_fd = -1; } }