static struct passwd *getpwnam_alloc_cached(TALLOC_CTX *mem_ctx, const char *name) { struct passwd *pw, *for_cache; pw = (struct passwd *)memcache_lookup_talloc( NULL, GETPWNAM_CACHE, data_blob_string_const_null(name)); if (pw != NULL) { return tcopy_passwd(mem_ctx, pw); } pw = getpwnam(name); if (pw == NULL) { return NULL; } for_cache = tcopy_passwd(talloc_tos(), pw); if (for_cache == NULL) { return NULL; } memcache_add_talloc(NULL, GETPWNAM_CACHE, data_blob_string_const_null(name), &for_cache); return tcopy_passwd(mem_ctx, pw); }
static void share_mode_memcache_store(struct share_mode_data *d) { const DATA_BLOB key = memcache_key(&d->id); DEBUG(10,("stored entry for file %s seq 0x%llu key %s\n", d->base_name, (unsigned long long) d->sequence_number, file_id_string(talloc_tos(), &d->id))); /* Ensure everything stored in the cache is pristine. */ d->modified = false; d->fresh = false; /* * Ensure the memory going into the cache * doesn't have a destructor so it can be * cleanly freed by share_mode_memcache_delete(). */ talloc_set_destructor(d, NULL); /* Cache will own d after this call. */ memcache_add_talloc(NULL, SHARE_MODE_LOCK_CACHE, key, &d); }