summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2020-12-30 13:44:41 +0800
committerGitHub <[email protected]>2020-12-30 13:44:41 +0800
commit32cf8678379539e53f88a2b3d462e5449d7b77e6 (patch)
treeeb7658a10fcedc5098550e0087b1dff7fc22de16 /components
parenta9a004f5b41301a53c52b59b9b04e99cbabb4f6c (diff)
parentdb4b3ff125871427e78cd7105b28f68a3e7c646c (diff)
Merge pull request #4134 from Hxinrong/rt_event_recvBranch
add error checks of function rt_event_recv()
Diffstat (limited to 'components')
-rw-r--r--components/dfs/filesystems/jffs2/src/gcthread.c28
1 files changed, 25 insertions, 3 deletions
diff --git a/components/dfs/filesystems/jffs2/src/gcthread.c b/components/dfs/filesystems/jffs2/src/gcthread.c
index 4005ec4788..ab66e1878e 100644
--- a/components/dfs/filesystems/jffs2/src/gcthread.c
+++ b/components/dfs/filesystems/jffs2/src/gcthread.c
@@ -187,7 +187,8 @@ jffs2_stop_garbage_collect_thread(struct jffs2_sb_info *c)
{
struct super_block *sb=OFNI_BS_2SFFJ(c);
cyg_mtab_entry *mte;
- rt_uint32_t e;
+ rt_uint32_t e;
+ rt_err_t result;
//RT_ASSERT(sb->s_gc_thread_handle);
@@ -198,10 +199,20 @@ jffs2_stop_garbage_collect_thread(struct jffs2_sb_info *c)
D1(printk("jffs2_stop_garbage_collect_thread wait\n"));
- rt_event_recv(&sb->s_gc_thread_flags,
+ result = rt_event_recv(&sb->s_gc_thread_flags,
GC_THREAD_FLAG_HAS_EXIT,
RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR,
RT_WAITING_FOREVER, &e);
+ if (result == -RT_ETIMEOUT)
+ {
+ LOG_E("wait completed timeout");
+ return;
+ }
+ else if (result == -RT_ERROR)
+ {
+ LOG_E("event received error");
+ return;
+ }
// Kill and free the resources ... this is safe due to the flag
// from the thread.
@@ -218,15 +229,26 @@ jffs2_garbage_collect_thread(unsigned long data)
struct super_block *sb=OFNI_BS_2SFFJ(c);
cyg_mtab_entry *mte;
rt_uint32_t flag = 0;
+ rt_err_t result;
D1(printk("jffs2_garbage_collect_thread START\n"));
while(1) {
- rt_event_recv(&sb->s_gc_thread_flags,
+ result = rt_event_recv(&sb->s_gc_thread_flags,
GC_THREAD_FLAG_TRIG | GC_THREAD_FLAG_STOP,
RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR,
cyg_current_time() + CYGNUM_JFFS2_GS_THREAD_TICKS,
&flag);
+ if (result == -RT_ETIMEOUT)
+ {
+ LOG_E("wait completed timeout");
+ continue;
+ }
+ else if (result == -RT_ERROR)
+ {
+ LOG_E("event received error");
+ continue;
+ }
if (flag & GC_THREAD_FLAG_STOP)
break;