Kaynağa Gözat

Fix the problem that when dfs_v2 transmits fd, dentry or vnode does not exist (#8089)

zmq810150896 1 yıl önce
ebeveyn
işleme
e6eddfa711
1 değiştirilmiş dosya ile 13 ekleme ve 6 silme
  1. 13 6
      components/lwp/lwp_ipc.c

+ 13 - 6
components/lwp/lwp_ipc.c

@@ -407,19 +407,26 @@ static int _ipc_msg_fd_new(void *file)
         return -1;
     }
 
+    d->vnode = df->vnode;
+    d->flags = df->flags;
+    d->data = df->data;
+    d->magic = df->magic;
+
 #ifdef RT_USING_DFS_V2
     d->fops = df->fops;
     d->mode = df->mode;
     d->dentry = df->dentry;
-    d->dentry->ref_count ++;
+    if (d->dentry)
+        rt_atomic_add(&(d->dentry->ref_count), 1);
+
+    if (d->vnode)
+        rt_atomic_add(&(d->vnode->ref_count), 1);
+#else
+    if (d->vnode)
+        d->vnode->ref_count ++;
 #endif
 
-    d->vnode = df->vnode;
-    d->flags = df->flags;
-    d->data = df->data;
-    d->magic = df->magic;
 
-    d->vnode->ref_count ++;
 
     return fd;
 }