Hi Gleb, Sorry. Lost power at home earlier this morning and was operating on very low laptop battery power (and stealing network bandwidth from my neighbor over his unsecured wireless network :)), so sent you a brief reply earlier.
We have this bit of logic in uma_zfree_arg() /* See uma.h */ void uma_zfree_arg(uma_zone_t zone, void *item, void *udata) { ... ... /* * The race here is acceptable. If we miss it we'll just have to wait * a little longer for the limits to be reset. */ if (keg->uk_flags & UMA_ZFLAG_FULL) goto zfree_internal; ... ... zfree_internal: uma_zfree_internal(zone, item, udata, SKIP_DTOR, ZFREE_STATFREE); return; And uma_zfree_internal() frees the object back to the slab and wakes up all blocked processes (one of which will proceed) and the others will reset ZFLAG_FULL and block. But as objects get freed, they should all get freed to the slab as long as ZFLAG_FULL is set, and blocked procs woken up. > P.S. Let me do a small style nit-pick. :) All the UMA public functions are > preceeded with "uma_", so it will be more nice to create a public > uma_zone_drain(), > that just calls internal zone_drain(). Like uma_print_stats() or > uma_zdestroy() > are. I'll do this. thanks mohan _______________________________________________ cvs-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/cvs-all To unsubscribe, send any mail to "[EMAIL PROTECTED]"