int main(int argc, char *argv[]) { static char k1[] = { 'a' }; static char k2[] = { 'a', 'a' }; static char k3[] = { 'a', '\0', 'a' }; struct objcache cache; struct objcache_entry *ep1, *ep2, *ep3; int rc; g_thread_init(NULL); rc = objcache_init(&cache); OK(rc==0); ep1 = objcache_get(&cache, k1, sizeof(k1)); OK(ep1 != NULL); ep2 = objcache_get(&cache, k2, sizeof(k2)); OK(ep2 != NULL); ep3 = objcache_get(&cache, k3, sizeof(k3)); OK(ep3 != NULL); rc = objcache_count(&cache); OK(rc == 3); OK(ep1->ref == 1); /* no collisions, else improve hash */ objcache_put(&cache, ep1); objcache_put(&cache, ep2); objcache_put(&cache, ep3); ep2 = objcache_get(&cache, k2, sizeof(k2)); OK(ep2 != NULL); OK(ep2->ref == 1); /* new */ objcache_put(&cache, ep2); rc = objcache_count(&cache); OK(rc == 0); objcache_fini(&cache); return 0; }
void _mounts_init(void) { supers = objcache_init(NULL, "supers", sizeof(struct super)); BUG_ON(NULL == supers); }