btrfs-progs: resst info->periodic.timer_fd's value after free

task_period_stop() is used to close a timer explicitly, to avoid
the timer handle closed again by task_stop(), we should reset its
value after close.

Also add value-reset for info->id for safe.

Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Zhao Lei 2015-07-27 20:24:29 +08:00 committed by David Sterba
parent 867352bad9
commit f156337dc8
1 changed files with 5 additions and 1 deletions

View File

@ -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 = -1;
}
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);
@ -130,5 +133,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;
}
}