]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/miscfs/devfs/devfs_tree.c
xnu-2422.115.4.tar.gz
[apple/xnu.git] / bsd / miscfs / devfs / devfs_tree.c
index d8f3ae088c5bfe8206bc68e5df15a9a71f90b605..daf8c8ace913bc1f70813baec3f5bad7add29f72 100644 (file)
@@ -148,6 +148,7 @@ lck_grp_t   * devfs_lck_grp;
 lck_grp_attr_t * devfs_lck_grp_attr;
 lck_attr_t     * devfs_lck_attr;
 lck_mtx_t        devfs_mutex;
 lck_grp_attr_t * devfs_lck_grp_attr;
 lck_attr_t     * devfs_lck_attr;
 lck_mtx_t        devfs_mutex;
+lck_mtx_t        devfs_attr_mutex;
 
 devdirent_t *          dev_root = NULL;        /* root of backing tree */
 struct devfs_stats     devfs_stats;            /* hold stats */
 
 devdirent_t *          dev_root = NULL;        /* root of backing tree */
 struct devfs_stats     devfs_stats;            /* hold stats */
@@ -185,6 +186,7 @@ devfs_sinit(void)
        devfs_lck_attr = lck_attr_alloc_init();
 
        lck_mtx_init(&devfs_mutex, devfs_lck_grp, devfs_lck_attr);
        devfs_lck_attr = lck_attr_alloc_init();
 
        lck_mtx_init(&devfs_mutex, devfs_lck_grp, devfs_lck_attr);
+       lck_mtx_init(&devfs_attr_mutex, devfs_lck_grp, devfs_lck_attr);
 
        DEVFS_LOCK();
         error = dev_add_entry("root", NULL, DEV_DIR, NULL, NULL, NULL, &dev_root);
 
        DEVFS_LOCK();
         error = dev_add_entry("root", NULL, DEV_DIR, NULL, NULL, NULL, &dev_root);
@@ -1050,12 +1052,12 @@ dev_free_name(devdirent_t * dirent_p)
                        if(dnp->dn_linklist == dirent_p) {
                                dnp->dn_linklist = dirent_p->de_nextlink;
                        }
                        if(dnp->dn_linklist == dirent_p) {
                                dnp->dn_linklist = dirent_p->de_nextlink;
                        }
-                       dirent_p->de_nextlink->de_prevlinkp 
-                           = dirent_p->de_prevlinkp;
-                       *dirent_p->de_prevlinkp = dirent_p->de_nextlink;
                }
                devfs_dn_free(dnp);
        }
                }
                devfs_dn_free(dnp);
        }
+       
+       dirent_p->de_nextlink->de_prevlinkp = dirent_p->de_prevlinkp;
+       *(dirent_p->de_prevlinkp) = dirent_p->de_nextlink;
 
        /*
         * unlink ourselves from the directory on this plane
 
        /*
         * unlink ourselves from the directory on this plane