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;
+}