fix bug89898
Change-Id: I944242a2b33b85940cc223af53887dc72cf1cae3
diff --git a/mbtk/libmbtk_lib/sleep/mbtk_sleep.c b/mbtk/libmbtk_lib/sleep/mbtk_sleep.c
index c861a5a..407b906 100755
--- a/mbtk/libmbtk_lib/sleep/mbtk_sleep.c
+++ b/mbtk/libmbtk_lib/sleep/mbtk_sleep.c
@@ -224,8 +224,8 @@
}
else
{
- g_sleep_timer_cb(NULL, 0);
mbtk_autosuspend_enable(0);
+ g_sleep_timer_cb(NULL, 0);
g_sleep_timer_fd = 0;
LOGI("suspend_timer_success, retRead:%d\n", retRead);
}
@@ -322,6 +322,48 @@
return 0;
}
+int mbtk_suspend_timer_cancel(void)
+{
+ int ret = -1;
+ struct itimerspec timerSet;
+
+ if(0 < g_sleep_timer_fd)
+ {
+ LOGD("[%s] suspend timer deinit", __func__);
+ memset(&timerSet, 0x0, sizeof(struct itimerspec));
+ if(timerfd_settime(g_sleep_timer_fd, TFD_TIMER_CANCEL_ON_SET, &timerSet, NULL) != 0)
+ {
+ LOGE("[%s] timerfd_settime fail", __func__);
+ return -1;
+ }
+ }
+ if(0 < g_mEpollFd)
+ {
+ ret = epoll_ctl(g_mEpollFd, EPOLL_CTL_DEL, g_sleep_timer_fd, NULL);
+ if (ret != 0)
+ {
+ LOGE("[%s] epoll_ctl[%d] del g_sleep_timer_fd[%d] fail. [%s]\n", g_mEpollFd, g_sleep_timer_fd, strerror(errno));
+ return -1;
+ }
+ }
+ pthread_detach(g_timer_thread_id);
+ pthread_cancel(g_timer_thread_id);
+
+ g_timer_thread_id = 0;
+ if(0 < g_sleep_timer_fd)
+ {
+ close(g_sleep_timer_fd);
+ g_sleep_timer_fd = -1;
+ }
+
+ if(0 < g_mEpollFd)
+ {
+ close(g_mEpollFd);
+ g_mEpollFd = -1;
+ }
+
+ return 0;
+}