Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/kern_sysctl.c
Show First 20 Lines • Show All 163 Lines • ▼ Show 20 Lines | sysctl_root_handler_locked(struct sysctl_oid *oid, void *arg1, intmax_t arg2, | ||||
if (oid->oid_kind & CTLFLAG_DYN) | if (oid->oid_kind & CTLFLAG_DYN) | ||||
atomic_add_int(&oid->oid_running, 1); | atomic_add_int(&oid->oid_running, 1); | ||||
if (tracker != NULL) | if (tracker != NULL) | ||||
SYSCTL_RUNLOCK(tracker); | SYSCTL_RUNLOCK(tracker); | ||||
else | else | ||||
SYSCTL_WUNLOCK(); | SYSCTL_WUNLOCK(); | ||||
if (!(oid->oid_kind & CTLFLAG_MPSAFE)) | /* | ||||
* Temporary compatibilty with 3rd party software defining | |||||
* CTLFLAG_MPSAFE. | |||||
*/ | |||||
if ((oid->oid_kind & CTLFLAG_NEEDGIANT) || | |||||
!(oid->oid_kind & CTLFLAG_MPSAFE)) | |||||
mtx_lock(&Giant); | mtx_lock(&Giant); | ||||
error = oid->oid_handler(oid, arg1, arg2, req); | error = oid->oid_handler(oid, arg1, arg2, req); | ||||
if (!(oid->oid_kind & CTLFLAG_MPSAFE)) | if ((oid->oid_kind & CTLFLAG_NEEDGIANT) || | ||||
!(oid->oid_kind & CTLFLAG_MPSAFE)) | |||||
mtx_unlock(&Giant); | mtx_unlock(&Giant); | ||||
KFAIL_POINT_ERROR(_debug_fail_point, sysctl_running, error); | KFAIL_POINT_ERROR(_debug_fail_point, sysctl_running, error); | ||||
if (tracker != NULL) | if (tracker != NULL) | ||||
SYSCTL_RLOCK(tracker); | SYSCTL_RLOCK(tracker); | ||||
else | else | ||||
SYSCTL_WLOCK(); | SYSCTL_WLOCK(); | ||||
▲ Show 20 Lines • Show All 2,676 Lines • Show Last 20 Lines |