X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=task-utils.c;h=12b00027a2bae479f130252b501cd1dfd5104727;hb=dcb174ce2e2c9be1eaad73757d0312246560ba3d;hp=17fd57361c38392c149a472c4c6e973b0a058b2d;hpb=c3b69e59fc4e165bdabea130905e9b9525dfaeba;p=platform%2Fupstream%2Fbtrfs-progs.git diff --git a/task-utils.c b/task-utils.c index 17fd573..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; } @@ -64,10 +64,13 @@ void task_stop(struct task_info *info) if (info->id > 0) { pthread_cancel(info->id); pthread_join(info->id, NULL); + info->id = 0; } - if (info->periodic.timer_fd) + if (info->periodic.timer_fd) { close(info->periodic.timer_fd); + info->periodic.timer_fd = 0; + } if (info->postfn) info->postfn(info->private_data); @@ -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; } }