[Bug 194985] getdtablecount new syscall from openbsd
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Thu Nov 13 14:14:29 UTC 2014
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=194985
--- Comment #4 from Mateusz Guzik <mjg at FreeBSD.org> ---
+ p = td->td_proc;
+ PROC_LOCK(p);
+ fdp = p->p_fd;
+ FILEDESC_SLOCK(fdp);
+ td->td_retval[0] = fdp->fd_openfd;
+ FILEDESC_SUNLOCK(fdp);
+ PROC_UNLOCK(p);
proc lock has no useful purpose here. p_fd can change in some cases during
fork, but then the process is singlethreaded.
proc lock is a mutex with bound sleep, while filedesc lock has unbound sleep.
As such, they cannot be taken in this order anyway.
As a side note, they happen to be taken in the opposide order, so this code
gives 2 different opportunities for deadlocks.
The kernel would tell you that if you enabled WITNESS and INVARIANTS.
Lastly, I'm not a fan of counting fds if it can be avoided. As mentioned in my
previous comment, the kernel maintains a bitmap of open descriptors. I would
suspect counting set bits (= open descriptors) would be fast enough for real
life cases.
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-bugs
mailing list