Lines Matching refs:cache

191 static int memcache_validate_basedn(LDAPMemCache *cache, const char *basedn);
195 static int memcache_adj_size(LDAPMemCache *cache, unsigned long size,
197 static int memcache_free_entry(LDAPMemCache *cache, ldapmemcacheRes *pRes);
198 static int memcache_expired(LDAPMemCache *cache, ldapmemcacheRes *pRes,
200 static int memcache_add_to_list(LDAPMemCache *cache, ldapmemcacheRes *pRes,
204 static int memcache_free_from_list(LDAPMemCache *cache, ldapmemcacheRes *pRes,
215 static int memcache_access(LDAPMemCache *cache, int mode,
218 static void memcache_print_list( LDAPMemCache *cache, int index );
219 static void memcache_report_statistics( LDAPMemCache *cache );
358 ldap_memcache_set( LDAP *ld, LDAPMemCache *cache ) in ldap_memcache_set() argument
369 if (ld->ld_memcache != cache) { in ldap_memcache_set()
410 if (cache == NULL) { in ldap_memcache_set()
417 LDAP_MEMCACHE_MUTEX_LOCK( cache ); in ldap_memcache_set()
419 if ((nRes = memcache_adj_size(cache, sizeof(ldapmemcacheld), in ldap_memcache_set()
421 LDAP_MEMCACHE_MUTEX_UNLOCK( cache ); in ldap_memcache_set()
428 memcache_adj_size(cache, sizeof(ldapmemcacheld), in ldap_memcache_set()
433 pCur->ldmemcl_next = cache->ldmemc_lds; in ldap_memcache_set()
434 cache->ldmemc_lds = pCur; in ldap_memcache_set()
435 ld->ld_memcache = cache; in ldap_memcache_set()
438 LDAP_MEMCACHE_MUTEX_UNLOCK( cache ); in ldap_memcache_set()
471 ldap_memcache_update( LDAPMemCache *cache ) in ldap_memcache_update() argument
474 cache, 0, 0 ); in ldap_memcache_update()
476 if ( !NSLDAPI_VALID_MEMCACHE_POINTER( cache )) { in ldap_memcache_update()
480 LDAP_MEMCACHE_MUTEX_LOCK( cache ); in ldap_memcache_update()
481 memcache_access(cache, MEMCACHE_ACCESS_UPDATE, NULL, NULL, NULL); in ldap_memcache_update()
482 LDAP_MEMCACHE_MUTEX_UNLOCK( cache ); in ldap_memcache_update()
488 ldap_memcache_flush( LDAPMemCache *cache, char *dn, int scope ) in ldap_memcache_flush() argument
492 cache, ( dn == NULL ) ? "(null)" : dn, scope ); in ldap_memcache_flush()
494 if ( !NSLDAPI_VALID_MEMCACHE_POINTER( cache )) { in ldap_memcache_flush()
498 LDAP_MEMCACHE_MUTEX_LOCK( cache ); in ldap_memcache_flush()
501 memcache_access(cache, MEMCACHE_ACCESS_FLUSH_ALL, NULL, NULL, NULL); in ldap_memcache_flush()
503 memcache_access(cache, MEMCACHE_ACCESS_FLUSH, in ldap_memcache_flush()
507 LDAP_MEMCACHE_MUTEX_UNLOCK( cache ); in ldap_memcache_flush()
513 ldap_memcache_destroy( LDAPMemCache *cache ) in ldap_memcache_destroy() argument
520 cache, 0, 0 ); in ldap_memcache_destroy()
522 if ( !NSLDAPI_VALID_MEMCACHE_POINTER( cache )) { in ldap_memcache_destroy()
527 LDAP_MEMCACHE_MUTEX_LOCK( cache ); in ldap_memcache_destroy()
529 for (pNode = cache->ldmemc_lds; pNode; pNode = pNextNode, i++) { in ldap_memcache_destroy()
531 cache->ldmemc_lds = pNode->ldmemcl_next; in ldap_memcache_destroy()
540 LDAP_MEMCACHE_MUTEX_UNLOCK( cache ); in ldap_memcache_destroy()
543 if (cache->ldmemc_basedns) { in ldap_memcache_destroy()
544 for (i = 0; cache->ldmemc_basedns[i]; i++) { in ldap_memcache_destroy()
545 size += strlen(cache->ldmemc_basedns[i]) + 1; in ldap_memcache_destroy()
546 NSLDAPI_FREE(cache->ldmemc_basedns[i]); in ldap_memcache_destroy()
549 NSLDAPI_FREE(cache->ldmemc_basedns); in ldap_memcache_destroy()
553 if (cache->ldmemc_resTmp) { in ldap_memcache_destroy()
554 size += htable_sizeinbytes(cache->ldmemc_resTmp); in ldap_memcache_destroy()
555 memcache_access(cache, MEMCACHE_ACCESS_DELETE_ALL, NULL, NULL, NULL); in ldap_memcache_destroy()
556 htable_free(cache->ldmemc_resTmp); in ldap_memcache_destroy()
560 if (cache->ldmemc_resLookup) { in ldap_memcache_destroy()
561 size += htable_sizeinbytes(cache->ldmemc_resLookup); in ldap_memcache_destroy()
562 memcache_access(cache, MEMCACHE_ACCESS_FLUSH_ALL, NULL, NULL, NULL); in ldap_memcache_destroy()
563 htable_free(cache->ldmemc_resLookup); in ldap_memcache_destroy()
566 memcache_adj_size(cache, size, MEMCACHE_SIZE_NON_ENTRIES, in ldap_memcache_destroy()
569 LDAP_MEMCACHE_MUTEX_FREE( cache ); in ldap_memcache_destroy()
571 NSLDAPI_FREE(cache); in ldap_memcache_destroy()
858 memcache_validate_basedn(LDAPMemCache *cache, const char *basedn) in memcache_validate_basedn() argument
862 if ( cache->ldmemc_basedns == NULL ) { in memcache_validate_basedn()
873 return (cache->ldmemc_basedns && cache->ldmemc_basedns[0] ? in memcache_validate_basedn()
878 for (i = 0; cache->ldmemc_basedns[i]; i++) {
879 if (memcache_compare_dn(basedn, cache->ldmemc_basedns[i],
936 memcache_adj_size(LDAPMemCache *cache, unsigned long size,
945 cache->ldmemc_size_used += size;
946 if ((cache->ldmemc_size > 0) &&
947 (cache->ldmemc_size_used > cache->ldmemc_size)) {
949 if (size > cache->ldmemc_size_entries) {
950 cache->ldmemc_size_used -= size;
953 cache->ldmemc_size_entries, 0, 0 );
957 while (cache->ldmemc_size_used > cache->ldmemc_size) {
958 if (memcache_access(cache, MEMCACHE_ACCESS_FLUSH_LRU,
960 cache->ldmemc_size_used -= size;
969 cache->ldmemc_size_entries += size;
971 cache->ldmemc_size_used -= size;
972 assert(cache->ldmemc_size_used >= 0);
974 cache->ldmemc_size_entries -= size;
978 if ( cache->ldmemc_size == 0 ) { /* no size limit */
981 cache->ldmemc_size_used, 0, 0 );
985 "free space: %ld bytes).\n", cache->ldmemc_size_used,
986 cache->ldmemc_size - cache->ldmemc_size_used, 0 );
1277 memcache_free_entry(LDAPMemCache *cache, ldapmemcacheRes *pRes)
1295 memcache_adj_size(cache, size, MEMCACHE_SIZE_ENTRIES,
1304 memcache_free_from_list(LDAPMemCache *cache, ldapmemcacheRes *pRes, int index)
1314 if (cache->ldmemc_resHead[index] == pRes)
1315 cache->ldmemc_resHead[index] = pRes->ldmemcr_next[index];
1317 if (cache->ldmemc_resTail[index] == pRes)
1318 cache->ldmemc_resTail[index] = pRes->ldmemcr_prev[index];
1328 memcache_add_to_list(LDAPMemCache *cache, ldapmemcacheRes *pRes, int index)
1330 if (cache->ldmemc_resHead[index])
1331 cache->ldmemc_resHead[index]->ldmemcr_prev[index] = pRes;
1333 cache->ldmemc_resTail[index] = pRes;
1336 pRes->ldmemcr_next[index] = cache->ldmemc_resHead[index];
1337 cache->ldmemc_resHead[index] = pRes;
1366 memcache_print_list( LDAPMemCache *cache, int index )
1389 cache, name, 0 );
1390 for ( restmp = cache->ldmemc_resHead[index]; restmp != NULL;
1399 cache, name, 0 );
1405 memcache_expired(LDAPMemCache *cache, ldapmemcacheRes *pRes,
1408 if (!cache->ldmemc_ttl)
1414 cache->ldmemc_ttl);
1419 memcache_access(LDAPMemCache *cache, int mode,
1431 nRes = htable_get(cache->ldmemc_resTmp, pData2, (void**)&pRes);
1444 nRes = memcache_adj_size(cache, size, MEMCACHE_SIZE_ENTRIES,
1447 nRes = htable_put(cache->ldmemc_resTmp, pData2, (void*)pRes);
1449 memcache_add_to_list(cache, pRes, LIST_TMP);
1451 memcache_free_entry(cache, pRes);
1461 nRes = htable_get(cache->ldmemc_resTmp, pData1, (void**)&pRes);
1467 nRes = htable_remove(cache->ldmemc_resTmp, pData1, NULL);
1469 memcache_free_from_list(cache, pRes, LIST_TMP);
1470 memcache_free_entry(cache, pRes);
1474 nRes = memcache_adj_size(cache, size, MEMCACHE_SIZE_ENTRIES,
1478 nRes = htable_remove(cache->ldmemc_resTmp, pData1, NULL);
1480 memcache_free_from_list(cache, pRes, LIST_TMP);
1481 memcache_free_entry(cache, pRes);
1490 nRes = htable_remove(cache->ldmemc_resTmp, pData1, NULL);
1492 memcache_free_from_list(cache, pRes, LIST_TMP);
1497 if ((nRes = htable_put(cache->ldmemc_resLookup,
1500 memcache_add_to_list(cache, pRes, LIST_TTL);
1501 memcache_add_to_list(cache, pRes, LIST_LRU);
1503 memcache_free_entry(cache, pRes);
1511 nRes = htable_get(cache->ldmemc_resLookup, pData1, (void**)ppRes);
1515 if (!memcache_expired(cache, *ppRes, (unsigned long)time(0))) {
1516 memcache_free_from_list(cache, *ppRes, LIST_LRU);
1517 memcache_add_to_list(cache, *ppRes, LIST_LRU);
1521 nRes = htable_remove(cache->ldmemc_resLookup, pData1, NULL);
1523 memcache_free_from_list(cache, *ppRes, LIST_TTL);
1524 memcache_free_from_list(cache, *ppRes, LIST_LRU);
1525 memcache_free_entry(cache, *ppRes);
1534 if ((nRes = htable_remove(cache->ldmemc_resTmp, pData1,
1536 memcache_free_from_list(cache, pCurRes, LIST_TMP);
1537 memcache_free_entry(cache, pCurRes);
1543 nRes = htable_removeall(cache->ldmemc_resTmp, (void*)cache);
1548 ldapmemcacheRes *pCurRes = cache->ldmemc_resTail[LIST_TTL];
1551 for (; pCurRes; pCurRes = cache->ldmemc_resTail[LIST_TTL]) {
1553 if (!memcache_expired(cache, pCurRes, curTime))
1556 nRes = htable_remove(cache->ldmemc_resLookup,
1559 memcache_free_from_list(cache, pCurRes, LIST_TTL);
1560 memcache_free_from_list(cache, pCurRes, LIST_LRU);
1561 memcache_free_entry(cache, pCurRes);
1567 ldapmemcacheRes *pCurRes = cache->ldmemc_resHead[LIST_TTL];
1569 nRes = htable_removeall(cache->ldmemc_resLookup, (void*)cache);
1571 for (; pCurRes; pCurRes = cache->ldmemc_resHead[LIST_TTL]) {
1572 memcache_free_from_list(cache, pCurRes, LIST_LRU);
1573 cache->ldmemc_resHead[LIST_TTL] =
1574 cache->ldmemc_resHead[LIST_TTL]->ldmemcr_next[LIST_TTL];
1575 memcache_free_entry(cache, pCurRes);
1577 cache->ldmemc_resTail[LIST_TTL] = NULL;
1590 if (cache->ldmemc_basedns) {
1591 for (i = 0; cache->ldmemc_basedns[i]; i++) {
1592 if ((memcache_compare_dn(cache->ldmemc_basedns[i], dn,
1594 (memcache_compare_dn(dn, cache->ldmemc_basedns[i],
1598 if (cache->ldmemc_basedns[i] == NULL)
1606 for (pRes = cache->ldmemc_resHead[list_id]; pRes != NULL;
1633 nRes = htable_remove(cache->ldmemc_resLookup,
1636 memcache_free_from_list(cache, pRes, LIST_TTL);
1637 memcache_free_from_list(cache, pRes, LIST_LRU);
1639 nRes = htable_remove(cache->ldmemc_resTmp,
1642 memcache_free_from_list(cache, pRes, LIST_TMP);
1644 memcache_free_entry(cache, pRes);
1651 ldapmemcacheRes *pRes = cache->ldmemc_resTail[LIST_LRU];
1659 nRes = htable_remove(cache->ldmemc_resLookup,
1662 memcache_free_from_list(cache, pRes, LIST_TTL);
1663 memcache_free_from_list(cache, pRes, LIST_LRU);
1664 memcache_free_entry(cache, pRes);
1677 memcache_report_statistics( LDAPMemCache *cache )
1681 if ( cache->ldmemc_stats.ldmemcstat_tries == 0 ) {
1684 hitrate = ( 100L * cache->ldmemc_stats.ldmemcstat_hits ) /
1685 cache->ldmemc_stats.ldmemcstat_tries;
1687 LDAPDebug( LDAP_DEBUG_STATS, "memcache 0x%x:\n", cache, 0, 0 );
1689 cache->ldmemc_stats.ldmemcstat_tries,
1690 cache->ldmemc_stats.ldmemcstat_hits, hitrate );
1691 if ( cache->ldmemc_size <= 0 ) { /* no size limit */
1693 cache->ldmemc_size_used, 0, 0 );
1696 cache->ldmemc_size_used,
1697 cache->ldmemc_size - cache->ldmemc_size_used, 0 );
1990 LDAPMemCache *cache = (LDAPMemCache*)pData;
2012 memcache_free_from_list(cache, pCurRes, LIST_TMP);
2013 memcache_free_entry(cache, pCurRes);
2023 LDAPMemCache *cache = (LDAPMemCache*)pData;
2032 memcache_free_from_list(cache, pCurRes, LIST_TMP);
2033 memcache_free_entry(cache, pCurRes);