Page MenuHomeFreeBSD

D36743.diff
No OneTemporary

D36743.diff

diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c
--- a/sys/kern/kern_sysctl.c
+++ b/sys/kern/kern_sysctl.c
@@ -479,10 +479,9 @@
/*
* Insert the OID into the parent's list sorted by OID number.
*/
-retry:
key.oid_number = oid_number;
- p = RB_FIND(sysctl_oid_list, parent, &key);
- if (p) {
+ p = RB_NFIND(sysctl_oid_list, parent, &key);
+ while (p != NULL && oid_number == p->oid_number) {
/* get the next valid OID number */
if (oid_number < CTL_AUTO_START ||
oid_number == 0x7fffffff) {
@@ -491,10 +490,12 @@
/* don't loop forever */
if (!timeout--)
panic("sysctl: Out of OID numbers\n");
- goto retry;
- } else {
- oid_number++;
+ key.oid_number = oid_number;
+ p = RB_NFIND(sysctl_oid_list, parent, &key);
+ continue;
}
+ p = RB_NEXT(sysctl_oid_list, NULL, p);
+ oid_number++;
}
/* check for non-auto OID number collision */
if (oidp->oid_number >= 0 && oidp->oid_number < CTL_AUTO_START &&

File Metadata

Mime Type
text/plain
Expires
Thu, Mar 6, 11:46 PM (16 h, 42 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17021714
Default Alt Text
D36743.diff (966 B)

Event Timeline