Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/kern_resource.c
Show First 20 Lines • Show All 1,270 Lines • ▼ Show 20 Lines | uifind(uid_t uid) | ||||
rw_runlock(&uihashtbl_lock); | rw_runlock(&uihashtbl_lock); | ||||
if (uip != NULL) | if (uip != NULL) | ||||
return (uip); | return (uip); | ||||
new_uip = malloc(sizeof(*new_uip), M_UIDINFO, M_WAITOK | M_ZERO); | new_uip = malloc(sizeof(*new_uip), M_UIDINFO, M_WAITOK | M_ZERO); | ||||
racct_create(&new_uip->ui_racct); | racct_create(&new_uip->ui_racct); | ||||
refcount_init(&new_uip->ui_ref, 1); | refcount_init(&new_uip->ui_ref, 1); | ||||
new_uip->ui_uid = uid; | new_uip->ui_uid = uid; | ||||
mtx_init(&new_uip->ui_vmsize_mtx, "ui_vmsize", NULL, MTX_DEF); | |||||
rw_wlock(&uihashtbl_lock); | rw_wlock(&uihashtbl_lock); | ||||
/* | /* | ||||
* There's a chance someone created our uidinfo while we | * There's a chance someone created our uidinfo while we | ||||
* were in malloc and not holding the lock, so we have to | * were in malloc and not holding the lock, so we have to | ||||
* make sure we don't insert a duplicate uidinfo. | * make sure we don't insert a duplicate uidinfo. | ||||
*/ | */ | ||||
if ((uip = uilookup(uid)) == NULL) { | if ((uip = uilookup(uid)) == NULL) { | ||||
LIST_INSERT_HEAD(UIHASH(uid), new_uip, ui_hash); | LIST_INSERT_HEAD(UIHASH(uid), new_uip, ui_hash); | ||||
rw_wunlock(&uihashtbl_lock); | rw_wunlock(&uihashtbl_lock); | ||||
uip = new_uip; | uip = new_uip; | ||||
} else { | } else { | ||||
rw_wunlock(&uihashtbl_lock); | rw_wunlock(&uihashtbl_lock); | ||||
racct_destroy(&new_uip->ui_racct); | racct_destroy(&new_uip->ui_racct); | ||||
mtx_destroy(&new_uip->ui_vmsize_mtx); | |||||
free(new_uip, M_UIDINFO); | free(new_uip, M_UIDINFO); | ||||
} | } | ||||
return (uip); | return (uip); | ||||
} | } | ||||
/* | /* | ||||
* Place another refcount on a uidinfo struct. | * Place another refcount on a uidinfo struct. | ||||
*/ | */ | ||||
▲ Show 20 Lines • Show All 44 Lines • ▼ Show 20 Lines | if (uip->ui_sbsize != 0) | ||||
printf("freeing uidinfo: uid = %d, sbsize = %ld\n", | printf("freeing uidinfo: uid = %d, sbsize = %ld\n", | ||||
uip->ui_uid, uip->ui_sbsize); | uip->ui_uid, uip->ui_sbsize); | ||||
if (uip->ui_proccnt != 0) | if (uip->ui_proccnt != 0) | ||||
printf("freeing uidinfo: uid = %d, proccnt = %ld\n", | printf("freeing uidinfo: uid = %d, proccnt = %ld\n", | ||||
uip->ui_uid, uip->ui_proccnt); | uip->ui_uid, uip->ui_proccnt); | ||||
if (uip->ui_vmsize != 0) | if (uip->ui_vmsize != 0) | ||||
printf("freeing uidinfo: uid = %d, swapuse = %lld\n", | printf("freeing uidinfo: uid = %d, swapuse = %lld\n", | ||||
uip->ui_uid, (unsigned long long)uip->ui_vmsize); | uip->ui_uid, (unsigned long long)uip->ui_vmsize); | ||||
mtx_destroy(&uip->ui_vmsize_mtx); | |||||
free(uip, M_UIDINFO); | free(uip, M_UIDINFO); | ||||
} | } | ||||
#ifdef RACCT | #ifdef RACCT | ||||
void | void | ||||
ui_racct_foreach(void (*callback)(struct racct *racct, | ui_racct_foreach(void (*callback)(struct racct *racct, | ||||
void *arg2, void *arg3), void (*pre)(void), void (*post)(void), | void *arg2, void *arg3), void (*pre)(void), void (*post)(void), | ||||
void *arg2, void *arg3) | void *arg2, void *arg3) | ||||
▲ Show 20 Lines • Show All 89 Lines • Show Last 20 Lines |