- Timestamp:
- 03/20/10 13:50:44 (15 years ago)
- Location:
- trunk/lib
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/lib/lru_cache.c
r169 r184 119 119 if(max_keys == 0) 120 120 ret_val->num_buckets = 1024; 121 else if(max_keys == 1) 122 ret_val->num_buckets = 1; 121 123 else 122 124 { … … 125 127 ret_val->num_buckets = 1; 126 128 } 127 129 128 130 ret_val->table = talloc_array(ret_val, 129 131 lru_cache_element*, ret_val->num_buckets); … … 177 179 */ 178 180 if(ht->talloc_data) 179 talloc_ free(e->data);181 talloc_unlink(e, e->data); 180 182 181 183 if(e->newer == NULL) … … 224 226 225 227 if(ht->talloc_data) 226 talloc_ free(e->data);228 talloc_unlink(e, e->data); 227 229 228 230 tmp_index = talloc_realloc_size(e, e->index, index_len); … … 261 263 e->data = data; 262 264 if(ht->talloc_data) 263 talloc_ steal(e, e->data);265 talloc_reference(e, e->data); 264 266 265 267 /* Finally, let's insert the element to the newest position in the LRU list.*/ -
trunk/lib/regfi.c
r182 r184 947 947 948 948 for(i=0; i < num_lists; i++) 949 regfi_subkeylist_free(lists[i]);949 talloc_free(lists[i]); 950 950 free(lists); 951 951 … … 1185 1185 if(vk->valuename == NULL) 1186 1186 { 1187 regfi_free_value(vk);1187 talloc_free(vk); 1188 1188 return; 1189 1189 } … … 1279 1279 if(nk->keyname == NULL) 1280 1280 { 1281 regfi_free_key(nk);1281 talloc_free(nk); 1282 1282 return; 1283 1283 } … … 1333 1333 if(strict) 1334 1334 { 1335 regfi_free_key(nk);1335 talloc_free(nk); 1336 1336 return NULL; 1337 1337 } … … 1350 1350 if(strict) 1351 1351 { 1352 regfi_free_key(nk);1352 talloc_free(nk); 1353 1353 return NULL; 1354 1354 } … … 1367 1367 if(strict) 1368 1368 { 1369 regfi_free_key(nk);1369 talloc_free(nk); 1370 1370 return NULL; 1371 1371 } … … 1400 1400 void* failure_ptr = NULL; 1401 1401 1402 max_size = regfi_calc_maxsize(file, offset); 1403 if(max_size < 0) 1404 return NULL; 1405 1406 if(file->sk_cache == NULL) 1407 return regfi_parse_sk(file, offset, max_size, strict); 1408 1402 1409 if(!regfi_lock(file, file->sk_lock, "regfi_load_sk")) 1403 1410 return NULL; … … 1412 1419 if(ret_val == NULL) 1413 1420 { 1414 max_size = regfi_calc_maxsize(file, offset);1415 if(max_size < 0)1416 return NULL;1417 1418 1421 ret_val = regfi_parse_sk(file, offset, max_size, strict); 1419 1422 if(ret_val == NULL) … … 1424 1427 *(uint32_t*)failure_ptr = REGFI_OFFSET_NONE; 1425 1428 lru_cache_update(file->sk_cache, &offset, 4, failure_ptr); 1429 1430 /* Let the cache be the only owner of this */ 1431 talloc_unlink(NULL, failure_ptr); 1426 1432 return NULL; 1427 1433 } 1428 1429 lru_cache_update(file->sk_cache, &offset, 4, ret_val);1430 1434 } 1431 1435 1432 1436 if(!regfi_unlock(file, file->sk_lock, "regfi_load_sk")) 1433 return NULL; 1437 { 1438 talloc_unlink(NULL, ret_val); 1439 return NULL; 1440 } 1434 1441 1435 1442 return ret_val; … … 1597 1604 cache_secret = 0x15DEAD05^time(NULL)^(getpid()<<16); 1598 1605 1599 /* Cache an unlimited number of SK records. Typically there are very few. */ 1600 rb->sk_cache = lru_cache_create_ctx(rb, 0, cache_secret, true); 1606 if(REGFI_CACHE_SK) 1607 rb->sk_cache = lru_cache_create_ctx(rb, 64, cache_secret, true); 1608 else 1609 rb->sk_cache = NULL; 1601 1610 1602 1611 /* success */ … … 1678 1687 /****************************************************************************** 1679 1688 *****************************************************************************/ 1680 void regfi_free_key(REGFI_NK_REC* nk) 1681 { 1682 regfi_subkeylist_free(nk->subkeys); 1683 talloc_free(nk); 1684 } 1685 1686 1687 /****************************************************************************** 1688 *****************************************************************************/ 1689 void regfi_free_value(REGFI_VK_REC* vk) 1690 { 1691 talloc_free(vk); 1692 } 1693 1694 1695 /****************************************************************************** 1696 *****************************************************************************/ 1697 void regfi_subkeylist_free(REGFI_SUBKEY_LIST* list) 1698 { 1699 if(list != NULL) 1700 { 1701 talloc_free(list); 1702 } 1703 } 1689 void regfi_free_record(const void* record) 1690 { 1691 talloc_unlink(NULL, (void*)record); 1692 } 1693 1704 1694 1705 1695 … … 1731 1721 } 1732 1722 ret_val->cur_key = root; 1733 talloc_ steal(ret_val, root);1723 talloc_reference(ret_val, root); 1734 1724 1735 1725 ret_val->key_positions = void_stack_new(REGFI_MAX_DEPTH); … … 1783 1773 { 1784 1774 talloc_free(pos); 1785 regfi_free_key(subkey);1775 talloc_unlink(NULL, subkey); 1786 1776 return false; 1787 1777 } 1788 talloc_ steal(i, subkey);1778 talloc_reference(i, subkey); 1789 1779 1790 1780 i->cur_key = subkey; … … 1806 1796 return false; 1807 1797 1808 regfi_free_key(i->cur_key);1798 talloc_unlink(i, i->cur_key); 1809 1799 i->cur_key = pos->nk; 1810 1800 i->cur_subkey = pos->cur_subkey; … … 1847 1837 else 1848 1838 { 1849 regfi_free_key(subkey);1839 talloc_unlink(NULL, subkey); 1850 1840 subkey = (REGFI_NK_REC*)regfi_iterator_next_subkey(i); 1851 1841 } … … 1858 1848 } 1859 1849 1860 regfi_free_key(subkey);1850 talloc_unlink(NULL, subkey); 1861 1851 return true; 1862 1852 } … … 1909 1899 /****************************************************************************** 1910 1900 *****************************************************************************/ 1911 REGFI_NK_REC* regfi_iterator_first_subkey(REGFI_ITERATOR* i)1901 const REGFI_NK_REC* regfi_iterator_first_subkey(REGFI_ITERATOR* i) 1912 1902 { 1913 1903 i->cur_subkey = 0; … … 1918 1908 /****************************************************************************** 1919 1909 *****************************************************************************/ 1920 REGFI_NK_REC* regfi_iterator_cur_subkey(REGFI_ITERATOR* i)1910 const REGFI_NK_REC* regfi_iterator_cur_subkey(REGFI_ITERATOR* i) 1921 1911 { 1922 1912 uint32_t nk_offset; … … 1929 1919 nk_offset = i->cur_key->subkeys->elements[i->cur_subkey].offset; 1930 1920 1931 return regfi_load_key(i->f, nk_offset+REGFI_REGF_SIZE, i->string_encoding,1932 true);1921 return regfi_load_key(i->f, nk_offset+REGFI_REGF_SIZE, 1922 i->string_encoding, true); 1933 1923 } 1934 1924 … … 1937 1927 *****************************************************************************/ 1938 1928 /* XXX: some way of indicating reason for failure should be added. */ 1939 REGFI_NK_REC* regfi_iterator_next_subkey(REGFI_ITERATOR* i)1940 { 1941 REGFI_NK_REC* subkey;1929 const REGFI_NK_REC* regfi_iterator_next_subkey(REGFI_ITERATOR* i) 1930 { 1931 const REGFI_NK_REC* subkey; 1942 1932 1943 1933 i->cur_subkey++; … … 1955 1945 bool regfi_iterator_find_value(REGFI_ITERATOR* i, const char* value_name) 1956 1946 { 1957 REGFI_VK_REC* cur;1947 const REGFI_VK_REC* cur; 1958 1948 bool found = false; 1959 1949 uint32_t old_value = i->cur_value; … … 1973 1963 else 1974 1964 { 1975 regfi_free_ value(cur);1965 regfi_free_record(cur); 1976 1966 cur = regfi_iterator_next_value(i); 1977 1967 } … … 1984 1974 } 1985 1975 1986 regfi_free_ value(cur);1976 regfi_free_record(cur); 1987 1977 return true; 1988 1978 } … … 1991 1981 /****************************************************************************** 1992 1982 *****************************************************************************/ 1993 REGFI_VK_REC* regfi_iterator_first_value(REGFI_ITERATOR* i)1983 const REGFI_VK_REC* regfi_iterator_first_value(REGFI_ITERATOR* i) 1994 1984 { 1995 1985 i->cur_value = 0; … … 2000 1990 /****************************************************************************** 2001 1991 *****************************************************************************/ 2002 REGFI_VK_REC* regfi_iterator_cur_value(REGFI_ITERATOR* i)1992 const REGFI_VK_REC* regfi_iterator_cur_value(REGFI_ITERATOR* i) 2003 1993 { 2004 1994 REGFI_VK_REC* ret_val = NULL; … … 2021 2011 /****************************************************************************** 2022 2012 *****************************************************************************/ 2023 REGFI_VK_REC* regfi_iterator_next_value(REGFI_ITERATOR* i)2024 { 2025 REGFI_VK_REC* ret_val;2013 const REGFI_VK_REC* regfi_iterator_next_value(REGFI_ITERATOR* i) 2014 { 2015 const REGFI_VK_REC* ret_val; 2026 2016 2027 2017 i->cur_value++; … … 2036 2026 /****************************************************************************** 2037 2027 *****************************************************************************/ 2038 REGFI_CLASSNAME* regfi_iterator_fetch_classname(REGFI_ITERATOR* i, 2039 const REGFI_NK_REC* key)2028 const REGFI_CLASSNAME* regfi_iterator_fetch_classname(REGFI_ITERATOR* i, 2029 const REGFI_NK_REC* key) 2040 2030 { 2041 2031 REGFI_CLASSNAME* ret_val; … … 2100 2090 /****************************************************************************** 2101 2091 *****************************************************************************/ 2102 REGFI_DATA* regfi_iterator_fetch_data(REGFI_ITERATOR* i,2103 2092 const REGFI_DATA* regfi_iterator_fetch_data(REGFI_ITERATOR* i, 2093 const REGFI_VK_REC* value) 2104 2094 { 2105 2095 REGFI_DATA* ret_val = NULL; … … 2140 2130 2141 2131 return ret_val; 2142 }2143 2144 2145 /******************************************************************************2146 *****************************************************************************/2147 void regfi_free_classname(REGFI_CLASSNAME* classname)2148 {2149 talloc_free(classname);2150 }2151 2152 /******************************************************************************2153 *****************************************************************************/2154 void regfi_free_data(REGFI_DATA* data)2155 {2156 talloc_free(data);2157 2132 } 2158 2133
Note: See TracChangeset
for help on using the changeset viewer.