浏览代码

Update epoll and timerfd (#8330)

zmq810150896 1 年之前
父节点
当前提交
cdad0c254a
共有 1 个文件被更改,包括 18 次插入3 次删除
  1. 18 3
      components/libc/posix/io/timerfd/timerfd.c

+ 18 - 3
components/libc/posix/io/timerfd/timerfd.c

@@ -14,6 +14,10 @@
 #include <poll.h>
 #include <sys/timerfd.h>
 
+#define DBG_TAG    "TIMERFD"
+#define DBG_LVL    DBG_INFO
+#include <rtdbg.h>
+
 #define INIT_PERIODIC 0
 #define OPEN_PERIODIC 1
 #define ENTER_PERIODIC 2
@@ -164,7 +168,7 @@ static ssize_t timerfd_read(struct dfs_file *file, void *buf, size_t count, off_
         }
 
         (*buffer) = rt_atomic_load(&(tfd->timeout_num));
-
+        rt_atomic_store(&(tfd->timeout_num), 0);
         rt_atomic_store(&(tfd->ticks), 0);
     }
 
@@ -325,7 +329,13 @@ static void timerfd_timeout(void *parameter)
         tfd->timer = rt_timer_create(TIMERFD_MUTEX_NAME, timerfd_timeout,
                         tfd, tfd->tick_out,
                         RT_TIMER_FLAG_PERIODIC | RT_TIMER_FLAG_SOFT_TIMER);
-        RT_ASSERT(tfd->timer);
+
+        if (tfd->timer == RT_NULL)
+        {
+            LOG_E("rt_timer_create fail \n");
+            rt_mutex_release(&tfd->lock);
+            return ;
+        }
         rt_timer_start(tfd->timer);
     }
 
@@ -458,7 +468,12 @@ static int timerfd_do_settime(int fd, int flags, const struct itimerspec *new, s
             tfd->timer = rt_timer_create(TIMERFD_MUTEX_NAME, timerfd_timeout,
                             tfd, tick_out,
                             RT_TIMER_FLAG_ONE_SHOT | RT_TIMER_FLAG_SOFT_TIMER);
-            RT_ASSERT(tfd->timer);
+            if (tfd->timer == RT_NULL)
+            {
+                LOG_E("rt_timer_create fail \n");
+                rt_mutex_release(&tfd->lock);
+                return -ENOMEM;
+            }
             rt_timer_start(tfd->timer);
         }
         else