Date: Fri, 12 Dec 2008 12:06:28 +0000 (UTC) From: Konstantin Belousov <kib@FreeBSD.org> To: cvs-src-old@freebsd.org Subject: cvs commit: src/sys/kern kern_prot.c kern_sysctl.c Message-ID: <200812121206.mBCC6g0r021827@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
kib 2008-12-12 12:06:28 UTC FreeBSD src repository Modified files: sys/kern kern_prot.c kern_sysctl.c Log: SVN rev 185983 on 2008-12-12 12:06:28Z by kib The userland_sysctl() function retries sysctl_root() until returned error is not EAGAIN. Several sysctls that inspect another process use p_candebug() for checking access right for the curproc. p_candebug() returns EAGAIN for some reasons, in particular, for the process doing exec() now. If execing process tries to lock Giant, we get a livelock, because sysctl handlers are covered by Giant, and often do not sleep. Break the livelock by dropping Giant and allowing other threads to execute in the EAGAIN loop. Also, do not return EAGAIN from p_candebug() when process is executing, use more appropriate EBUSY error [1]. Reported and tested by: pho Suggested by: rwatson [1] Reviewed by: rwatson, des MFC after: 1 week Revision Changes Path 1.215 +1 -1 src/sys/kern/kern_prot.c 1.181 +8 -2 src/sys/kern/kern_sysctl.c
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200812121206.mBCC6g0r021827>