Print this page
XXXX adding PID information to netstat output
*** 176,185 ****
--- 176,192 ----
} else {
if (cmd == F_DUPFD_CLOEXEC) {
f_setfd(retval, FD_CLOEXEC);
}
}
+
+ if (error == 0 && fp->f_vnode != NULL) {
+ (void) VOP_IOCTL(fp->f_vnode, F_FORKED,
+ (intptr_t) p, FKIOCTL,
+ kcred, NULL, NULL);
+ }
+
goto done;
case F_DUP2FD_CLOEXEC:
if (fdes == iarg) {
error = EINVAL;
*** 212,231 ****
--- 219,253 ----
*/
mutex_enter(&fp->f_tlock);
fp->f_count++;
mutex_exit(&fp->f_tlock);
releasef(fdes);
+
+ /* assume we have forked successfully */
+
+ if (fp->f_vnode != NULL) {
+ (void) VOP_IOCTL(fp->f_vnode, F_FORKED,
+ (intptr_t) p, FKIOCTL,
+ kcred, NULL, NULL);
+ }
+
if ((error = closeandsetf(iarg, fp)) == 0) {
if (cmd == F_DUP2FD_CLOEXEC) {
f_setfd(iarg, FD_CLOEXEC);
}
retval = iarg;
} else {
mutex_enter(&fp->f_tlock);
if (fp->f_count > 1) {
fp->f_count--;
mutex_exit(&fp->f_tlock);
+ if (fp->f_vnode != NULL) {
+ VOP_IOCTL(fp->f_vnode, F_CLOSED,
+ (intptr_t) p, FKIOCTL,
+ kcred, NULL, NULL);
+ }
+
} else {
mutex_exit(&fp->f_tlock);
(void) closef(fp);
}
}