Page MenuHomeFreeBSD

D25616.id74295.diff
No OneTemporary

D25616.id74295.diff

Index: sys/kern/kern_descrip.c
===================================================================
--- sys/kern/kern_descrip.c
+++ sys/kern/kern_descrip.c
@@ -3347,13 +3347,17 @@
fdp = td->td_proc->p_fd;
smr_enter(pwd_smr);
- for (;;) {
- pwd = smr_entered_load(&fdp->fd_pwd, pwd_smr);
- MPASS(pwd != NULL);
- if (refcount_acquire_if_not_zero(&pwd->pwd_refcount))
- break;
+ pwd = smr_entered_load(&fdp->fd_pwd, pwd_smr);
+ MPASS(pwd != NULL);
+ if (__predict_true(refcount_acquire_if_not_zero(&pwd->pwd_refcount))) {
+ smr_exit(pwd_smr);
+ return (pwd);
}
smr_exit(pwd_smr);
+ FILEDESC_SLOCK(fdp);
+ pwd = pwd_hold_filedesc(fdp);
+ MPASS(pwd != NULL);
+ FILEDESC_SUNLOCK(fdp);
return (pwd);
}

File Metadata

Mime Type
text/plain
Expires
Thu, Sep 17, 7:20 AM (7 h, 47 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
39060282
Default Alt Text
D25616.id74295.diff (716 B)

Event Timeline