Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 550bbe86d83a7870fdddc73c68e5d2b2 > files > 249

libunbound-devel-1.3.4-1mdv2010.0.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>unbound: util/storage/slabhash.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css">
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.9 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li><a href="dirs.html"><span>Directories</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
  <div class="navpath"><a class="el" href="dir_4b581c88b01efb1cf178857b56f0f2fb.html">util</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_503386e5bff39eee21df0f1f4756eaa4.html">storage</a>
  </div>
</div>
<div class="contents">
<h1>slabhash.h File Reference</h1>Hash table that consists of smaller hash tables.  
<a href="#_details">More...</a>
<p>
<code>#include &quot;<a class="el" href="lruhash_8h.html">util/storage/lruhash.h</a>&quot;</code><br>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structslabhash.html">slabhash</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Hash table formed from several smaller ones.  <a href="structslabhash.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structslabhash__testkey.html">slabhash_testkey</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">test structure contains test key  <a href="structslabhash__testkey.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structslabhash__testdata.html">slabhash_testdata</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">test structure contains test data  <a href="structslabhash__testdata.html#_details">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="62837c9cc1a356aef600b2075a7b18b9"></a><!-- doxytag: member="slabhash.h::HASH_DEFAULT_SLABS" ref="62837c9cc1a356aef600b2075a7b18b9" args="" -->
#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8h.html#62837c9cc1a356aef600b2075a7b18b9">HASH_DEFAULT_SLABS</a>&nbsp;&nbsp;&nbsp;4</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">default number of slabs <br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structslabhash.html">slabhash</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8h.html#93d4bf4cc2642eaecaedec7693a2df9d">slabhash_create</a> (size_t numtables, size_t start_size, size_t maxmem, <a class="el" href="lruhash_8h.html#d1958b168b133c03a0d17ab811dbfe88">lruhash_sizefunc_t</a> sizefunc, <a class="el" href="lruhash_8h.html#68ffdb68cd2e0aafa404fe152670b171">lruhash_compfunc_t</a> compfunc, <a class="el" href="lruhash_8h.html#f571f96f363df9310562c7b49fab9b16">lruhash_delkeyfunc_t</a> delkeyfunc, <a class="el" href="lruhash_8h.html#3ae4e4bd0bff228eaa1c094e4db7774a">lruhash_deldatafunc_t</a> deldatafunc, void *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create new slabbed hash table.  <a href="#93d4bf4cc2642eaecaedec7693a2df9d"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8h.html#92defb88f1589934f096a92524c89039">slabhash_delete</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *table)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Delete hash table.  <a href="#92defb88f1589934f096a92524c89039"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8h.html#d77f7af9ee7b1bfe8f0767207b16e42e">slabhash_clear</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *table)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clear hash table.  <a href="#d77f7af9ee7b1bfe8f0767207b16e42e"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8h.html#bc4c4fe2849a2d91002fafd89f8a4f49">slabhash_insert</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *table, <a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a> hash, struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> *<a class="el" href="structentry.html">entry</a>, void *data, void *cb_override)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Insert a new element into the hashtable, uses lruhash_insert.  <a href="#bc4c4fe2849a2d91002fafd89f8a4f49"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8h.html#06a942bffa3def8859bc2d8acdfa1770">slabhash_lookup</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *table, <a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a> hash, void *key, int wr)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Lookup an <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> in the hashtable.  <a href="#06a942bffa3def8859bc2d8acdfa1770"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8h.html#f92a1f16588510e37a93c245881fd271">slabhash_remove</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *table, <a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a> hash, void *key)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Remove <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> from hashtable.  <a href="#f92a1f16588510e37a93c245881fd271"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8h.html#97cd418a0a8cc0913b4362201660c506">slabhash_status</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *table, const char *id, int extended)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Output debug info to the log as to state of the hash table.  <a href="#97cd418a0a8cc0913b4362201660c506"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8h.html#752f0c540222397e32ab9c3dcfb2ccf9">slabhash_get_size</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *table)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieve slab hash total size.  <a href="#752f0c540222397e32ab9c3dcfb2ccf9"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8h.html#60b94b5570ef166c07730f73608d6752">slabhash_get_mem</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *table)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieve slab hash current memory use.  <a href="#60b94b5570ef166c07730f73608d6752"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structlruhash.html">lruhash</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8h.html#fd3464a3cf9e8a2c1af539a090f4a1c6">slabhash_gettable</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *table, <a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a> hash)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get <a class="el" href="structlruhash.html" title="Hash table that keeps LRU list of entries.">lruhash</a> table for a given hash value.  <a href="#fd3464a3cf9e8a2c1af539a090f4a1c6"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8h.html#cee5a72de3c5c6804fcb07a171b0a660">slabhash_setmarkdel</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *table, <a class="el" href="lruhash_8h.html#b66fdcecf0922f195c9588ef39b2d4d0">lruhash_markdelfunc_t</a> md)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set markdel function.  <a href="#cee5a72de3c5c6804fcb07a171b0a660"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8h.html#4267cde1b52474814f48859700e4ece9">slabhash_traverse</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *table, int wr, void(*func)(struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> *, void *), void *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Traverse a <a class="el" href="structslabhash.html" title="Hash table formed from several smaller ones.">slabhash</a>.  <a href="#4267cde1b52474814f48859700e4ece9"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e75caf13a1d09785f78967860ff5438b"></a><!-- doxytag: member="slabhash.h::test_slabhash_sizefunc" ref="e75caf13a1d09785f78967860ff5438b" args="(void *, void *)" -->
size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8h.html#e75caf13a1d09785f78967860ff5438b">test_slabhash_sizefunc</a> (void *, void *)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">test sizefunc for <a class="el" href="structlruhash.html" title="Hash table that keeps LRU list of entries.">lruhash</a> <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5442882a02d9080ccf6004d09c972809"></a><!-- doxytag: member="slabhash.h::test_slabhash_compfunc" ref="5442882a02d9080ccf6004d09c972809" args="(void *, void *)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8h.html#5442882a02d9080ccf6004d09c972809">test_slabhash_compfunc</a> (void *, void *)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">test comparefunc for <a class="el" href="structlruhash.html" title="Hash table that keeps LRU list of entries.">lruhash</a> <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dfd6d4fed8b6b020adab931e604acdc0"></a><!-- doxytag: member="slabhash.h::test_slabhash_delkey" ref="dfd6d4fed8b6b020adab931e604acdc0" args="(void *, void *)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8h.html#dfd6d4fed8b6b020adab931e604acdc0">test_slabhash_delkey</a> (void *, void *)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">test delkey for <a class="el" href="structlruhash.html" title="Hash table that keeps LRU list of entries.">lruhash</a> <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="492c8c993830eaa94ea698f95d6193dc"></a><!-- doxytag: member="slabhash.h::test_slabhash_deldata" ref="492c8c993830eaa94ea698f95d6193dc" args="(void *, void *)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8h.html#492c8c993830eaa94ea698f95d6193dc">test_slabhash_deldata</a> (void *, void *)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">test deldata for <a class="el" href="structlruhash.html" title="Hash table that keeps LRU list of entries.">lruhash</a> <br></td></tr>
</table>
<hr><h2>Detailed Description</h2>
Hash table that consists of smaller hash tables. 
<p>
It cannot grow, but that gives it the ability to have multiple locks. Also this means there are multiple LRU lists. <hr><h2>Function Documentation</h2>
<a class="anchor" name="93d4bf4cc2642eaecaedec7693a2df9d"></a><!-- doxytag: member="slabhash.h::slabhash_create" ref="93d4bf4cc2642eaecaedec7693a2df9d" args="(size_t numtables, size_t start_size, size_t maxmem, lruhash_sizefunc_t sizefunc, lruhash_compfunc_t compfunc, lruhash_delkeyfunc_t delkeyfunc, lruhash_deldatafunc_t deldatafunc, void *arg)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structslabhash.html">slabhash</a>* slabhash_create           </td>
          <td>(</td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>numtables</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>start_size</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>maxmem</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#d1958b168b133c03a0d17ab811dbfe88">lruhash_sizefunc_t</a>&nbsp;</td>
          <td class="paramname"> <em>sizefunc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#68ffdb68cd2e0aafa404fe152670b171">lruhash_compfunc_t</a>&nbsp;</td>
          <td class="paramname"> <em>compfunc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#f571f96f363df9310562c7b49fab9b16">lruhash_delkeyfunc_t</a>&nbsp;</td>
          <td class="paramname"> <em>delkeyfunc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#3ae4e4bd0bff228eaa1c094e4db7774a">lruhash_deldatafunc_t</a>&nbsp;</td>
          <td class="paramname"> <em>deldatafunc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>arg</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Create new slabbed hash table. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>numtables,:</em>&nbsp;</td><td>number of hash tables to use, other parameters used to initialize these smaller hashtables. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>start_size,:</em>&nbsp;</td><td>size of hashtable array at start, must be power of 2. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>maxmem,:</em>&nbsp;</td><td>maximum amount of memory this table is allowed to use. so every table gets maxmem/numtables to use for itself. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>sizefunc,:</em>&nbsp;</td><td>calculates memory usage of entries. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>compfunc,:</em>&nbsp;</td><td>compares entries, 0 on equality. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>delkeyfunc,:</em>&nbsp;</td><td>deletes key. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>deldatafunc,:</em>&nbsp;</td><td>deletes data. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>arg,:</em>&nbsp;</td><td>user argument that is passed to user function calls. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: new hash table or NULL on malloc failure. </dd></dl>

<p>References <a class="el" href="slabhash_8h_source.html#l00065">slabhash::array</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="lruhash_8c_source.html#l00062">lruhash_create()</a>, <a class="el" href="slabhash_8h_source.html#l00061">slabhash::mask</a>, <a class="el" href="slabhash_8h_source.html#l00063">slabhash::shift</a>, <a class="el" href="slabhash_8h_source.html#l00059">slabhash::size</a>, and <a class="el" href="slabhash_8c_source.html#l00087">slabhash_delete()</a>.</p>

<p>Referenced by <a class="el" href="context_8c_source.html#l00054">context_finalize()</a>, <a class="el" href="daemon_8c_source.html#l00512">daemon_apply_cfg()</a>, <a class="el" href="infra_8c_source.html#l00085">infra_create()</a>, <a class="el" href="val__kcache_8c_source.html#l00049">key_cache_create()</a>, <a class="el" href="rrset_8c_source.html#l00057">rrset_cache_create()</a>, and <a class="el" href="unitslabhash_8c_source.html#l00359">slabhash_test()</a>.</p>

</div>
</div><p>
<a class="anchor" name="92defb88f1589934f096a92524c89039"></a><!-- doxytag: member="slabhash.h::slabhash_delete" ref="92defb88f1589934f096a92524c89039" args="(struct slabhash *table)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void slabhash_delete           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structslabhash.html">slabhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Delete hash table. 
<p>
Entries are all deleted. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>to delete. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="slabhash_8h_source.html#l00065">slabhash::array</a>, <a class="el" href="lruhash_8c_source.html#l00152">lruhash_delete()</a>, and <a class="el" href="slabhash_8h_source.html#l00059">slabhash::size</a>.</p>

<p>Referenced by <a class="el" href="context_8c_source.html#l00054">context_finalize()</a>, <a class="el" href="daemon_8c_source.html#l00512">daemon_apply_cfg()</a>, <a class="el" href="daemon_8c_source.html#l00475">daemon_delete()</a>, <a class="el" href="infra_8c_source.html#l00107">infra_delete()</a>, <a class="el" href="val__kcache_8c_source.html#l00073">key_cache_delete()</a>, <a class="el" href="rrset_8c_source.html#l00071">rrset_cache_delete()</a>, <a class="el" href="slabhash_8c_source.html#l00048">slabhash_create()</a>, <a class="el" href="unitslabhash_8c_source.html#l00359">slabhash_test()</a>, and <a class="el" href="libunbound_8c_source.html#l00153">ub_ctx_delete()</a>.</p>

</div>
</div><p>
<a class="anchor" name="d77f7af9ee7b1bfe8f0767207b16e42e"></a><!-- doxytag: member="slabhash.h::slabhash_clear" ref="d77f7af9ee7b1bfe8f0767207b16e42e" args="(struct slabhash *table)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void slabhash_clear           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structslabhash.html">slabhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Clear hash table. 
<p>
Entries are all deleted. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>to make empty. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="slabhash_8h_source.html#l00065">slabhash::array</a>, <a class="el" href="lruhash_8c_source.html#l00437">lruhash_clear()</a>, and <a class="el" href="slabhash_8h_source.html#l00059">slabhash::size</a>.</p>

<p>Referenced by <a class="el" href="daemon_8c_source.html#l00448">daemon_cleanup()</a>, <a class="el" href="libworker_8c_source.html#l00647">libworker_alloc_cleanup()</a>, <a class="el" href="unitslabhash_8c_source.html#l00243">test_long_table()</a>, and <a class="el" href="worker_8c_source.html#l01194">worker_alloc_cleanup()</a>.</p>

</div>
</div><p>
<a class="anchor" name="bc4c4fe2849a2d91002fafd89f8a4f49"></a><!-- doxytag: member="slabhash.h::slabhash_insert" ref="bc4c4fe2849a2d91002fafd89f8a4f49" args="(struct slabhash *table, hashvalue_t hash, struct lruhash_entry *entry, void *data, void *cb_override)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void slabhash_insert           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structslabhash.html">slabhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a>&nbsp;</td>
          <td class="paramname"> <em>hash</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> *&nbsp;</td>
          <td class="paramname"> <em>entry</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>cb_override</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Insert a new element into the hashtable, uses lruhash_insert. 
<p>
If key is already present data pointer in that <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> is updated.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>hash table. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>hash,:</em>&nbsp;</td><td>hash value. User calculates the hash. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>,:</em>&nbsp;</td><td>identifies the <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>. If key already present, this entry-&gt;key is deleted immediately. But entry-&gt;data is set to NULL before deletion, and put into the existing <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>. The data is then freed. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>data,:</em>&nbsp;</td><td>the data. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>cb_override,:</em>&nbsp;</td><td>if not NULL overrides the cb_arg for deletfunc. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="slabhash_8h_source.html#l00065">slabhash::array</a>, <a class="el" href="lruhash_8c_source.html#l00299">lruhash_insert()</a>, and <a class="el" href="slabhash_8c_source.html#l00111">slab_idx()</a>.</p>

<p>Referenced by <a class="el" href="dns_8c_source.html#l00073">dns_cache_store_msg()</a>, <a class="el" href="infra_8c_source.html#l00487">infra_edns_update()</a>, <a class="el" href="infra_8c_source.html#l00227">infra_host()</a>, <a class="el" href="infra_8c_source.html#l00457">infra_rtt_update()</a>, <a class="el" href="infra_8c_source.html#l00348">infra_set_lame()</a>, <a class="el" href="val__kcache_8c_source.html#l00082">key_cache_insert()</a>, <a class="el" href="rrset_8c_source.html#l00171">rrset_cache_update()</a>, <a class="el" href="unitslabhash_8c_source.html#l00083">test_short_table()</a>, <a class="el" href="unitslabhash_8c_source.html#l00109">testadd()</a>, and <a class="el" href="unitslabhash_8c_source.html#l00196">testadd_unlim()</a>.</p>

</div>
</div><p>
<a class="anchor" name="06a942bffa3def8859bc2d8acdfa1770"></a><!-- doxytag: member="slabhash.h::slabhash_lookup" ref="06a942bffa3def8859bc2d8acdfa1770" args="(struct slabhash *table, hashvalue_t hash, void *key, int wr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a>* slabhash_lookup           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structslabhash.html">slabhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a>&nbsp;</td>
          <td class="paramname"> <em>hash</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>key</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>wr</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Lookup an <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> in the hashtable. 
<p>
Uses lruhash_lookup. At the end of the function you hold a (read/write)lock on the <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>. The LRU is updated for the <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> (if found). <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>hash table. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>hash,:</em>&nbsp;</td><td>hash of key. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>key,:</em>&nbsp;</td><td>what to look for, compared against entries in overflow chain. the hash value must be set, and must work with compare function. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>wr,:</em>&nbsp;</td><td>set to true if you desire a writelock on the <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>. with a writelock you can update the data part. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: pointer to the <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> or NULL. The <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> is locked. The user must unlock the <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> when done. </dd></dl>

<p>References <a class="el" href="slabhash_8h_source.html#l00065">slabhash::array</a>, <a class="el" href="lruhash_8c_source.html#l00355">lruhash_lookup()</a>, and <a class="el" href="slabhash_8c_source.html#l00111">slab_idx()</a>.</p>

<p>Referenced by <a class="el" href="dns_8c_source.html#l00585">dns_cache_lookup()</a>, <a class="el" href="infra_8c_source.html#l00156">infra_lookup_host_nottl()</a>, <a class="el" href="pythonmod__utils_8c_source.html#l00071">invalidateQueryInCache()</a>, <a class="el" href="val__kcache_8c_source.html#l00104">key_cache_search()</a>, <a class="el" href="dns_8c_source.html#l00148">msg_cache_lookup()</a>, <a class="el" href="rrset_8c_source.html#l00226">rrset_cache_lookup()</a>, <a class="el" href="rrset_8c_source.html#l00171">rrset_cache_update()</a>, <a class="el" href="rrset_8c_source.html#l00349">rrset_check_sec_status()</a>, <a class="el" href="rrset_8c_source.html#l00316">rrset_update_sec_status()</a>, <a class="el" href="unitslabhash_8c_source.html#l00083">test_short_table()</a>, <a class="el" href="unitslabhash_8c_source.html#l00132">testlookup()</a>, <a class="el" href="unitslabhash_8c_source.html#l00221">testlookup_unlim()</a>, and <a class="el" href="worker_8c_source.html#l00681">worker_handle_request()</a>.</p>

</div>
</div><p>
<a class="anchor" name="f92a1f16588510e37a93c245881fd271"></a><!-- doxytag: member="slabhash.h::slabhash_remove" ref="f92a1f16588510e37a93c245881fd271" args="(struct slabhash *table, hashvalue_t hash, void *key)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void slabhash_remove           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structslabhash.html">slabhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a>&nbsp;</td>
          <td class="paramname"> <em>hash</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>key</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Remove <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> from hashtable. 
<p>
Does nothing if not found in hashtable. Delfunc is called for the <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>. Uses lruhash_remove. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>hash table. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>hash,:</em>&nbsp;</td><td>hash of key. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>key,:</em>&nbsp;</td><td>what to look for. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="slabhash_8h_source.html#l00065">slabhash::array</a>, <a class="el" href="lruhash_8c_source.html#l00377">lruhash_remove()</a>, and <a class="el" href="slabhash_8c_source.html#l00111">slab_idx()</a>.</p>

<p>Referenced by <a class="el" href="remote_8c_source.html#l01048">do_cache_remove()</a>, <a class="el" href="rrset_8c_source.html#l00385">rrset_cache_remove()</a>, <a class="el" href="unitslabhash_8c_source.html#l00083">test_short_table()</a>, <a class="el" href="unitslabhash_8c_source.html#l00121">testremove()</a>, and <a class="el" href="unitslabhash_8c_source.html#l00209">testremove_unlim()</a>.</p>

</div>
</div><p>
<a class="anchor" name="97cd418a0a8cc0913b4362201660c506"></a><!-- doxytag: member="slabhash.h::slabhash_status" ref="97cd418a0a8cc0913b4362201660c506" args="(struct slabhash *table, const char *id, int extended)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void slabhash_status           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structslabhash.html">slabhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>extended</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Output debug info to the log as to state of the hash table. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>hash table. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>id,:</em>&nbsp;</td><td>string printed with table to identify the hash table. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>extended,:</em>&nbsp;</td><td>set to true to print statistics on overflow bin lengths. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="slabhash_8h_source.html#l00065">slabhash::array</a>, <a class="el" href="log_8c_source.html#l00228">log_info()</a>, <a class="el" href="lruhash_8c_source.html#l00458">lruhash_status()</a>, <a class="el" href="slabhash_8h_source.html#l00061">slabhash::mask</a>, <a class="el" href="slabhash_8h_source.html#l00063">slabhash::shift</a>, and <a class="el" href="slabhash_8h_source.html#l00059">slabhash::size</a>.</p>

<p>Referenced by <a class="el" href="unitslabhash_8c_source.html#l00243">test_long_table()</a>, <a class="el" href="unitslabhash_8c_source.html#l00311">test_thr_main()</a>, and <a class="el" href="unitslabhash_8c_source.html#l00341">test_threaded_table()</a>.</p>

</div>
</div><p>
<a class="anchor" name="752f0c540222397e32ab9c3dcfb2ccf9"></a><!-- doxytag: member="slabhash.h::slabhash_get_size" ref="752f0c540222397e32ab9c3dcfb2ccf9" args="(struct slabhash *table)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t slabhash_get_size           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structslabhash.html">slabhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Retrieve slab hash total size. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>hash table. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>size configured as max. </dd></dl>

<p>References <a class="el" href="slabhash_8h_source.html#l00065">slabhash::array</a>, <a class="el" href="lruhash_8h_source.html#l00149">lruhash::lock</a>, <a class="el" href="slabhash_8h_source.html#l00059">slabhash::size</a>, and <a class="el" href="lruhash_8h_source.html#l00180">lruhash::space_max</a>.</p>

<p>Referenced by <a class="el" href="context_8c_source.html#l00054">context_finalize()</a>, <a class="el" href="daemon_8c_source.html#l00512">daemon_apply_cfg()</a>, <a class="el" href="infra_8c_source.html#l00116">infra_adjust()</a>, and <a class="el" href="rrset_8c_source.html#l00079">rrset_cache_adjust()</a>.</p>

</div>
</div><p>
<a class="anchor" name="60b94b5570ef166c07730f73608d6752"></a><!-- doxytag: member="slabhash.h::slabhash_get_mem" ref="60b94b5570ef166c07730f73608d6752" args="(struct slabhash *table)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t slabhash_get_mem           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structslabhash.html">slabhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Retrieve slab hash current memory use. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>hash table. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>memory in use. </dd></dl>

<p>References <a class="el" href="slabhash_8h_source.html#l00065">slabhash::array</a>, <a class="el" href="lruhash_8c_source.html#l00492">lruhash_get_mem()</a>, <a class="el" href="lruhash_8h_source.html#l00164">lruhash::size</a>, and <a class="el" href="slabhash_8h_source.html#l00059">slabhash::size</a>.</p>

<p>Referenced by <a class="el" href="infra_8c_source.html#l00578">infra_get_mem()</a>, <a class="el" href="val__kcache_8c_source.html#l00150">key_cache_get_mem()</a>, <a class="el" href="remote_8c_source.html#l00653">print_mem()</a>, and <a class="el" href="worker_8c_source.html#l00131">worker_mem_report()</a>.</p>

</div>
</div><p>
<a class="anchor" name="fd3464a3cf9e8a2c1af539a090f4a1c6"></a><!-- doxytag: member="slabhash.h::slabhash_gettable" ref="fd3464a3cf9e8a2c1af539a090f4a1c6" args="(struct slabhash *table, hashvalue_t hash)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structlruhash.html">lruhash</a>* slabhash_gettable           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structslabhash.html">slabhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a>&nbsp;</td>
          <td class="paramname"> <em>hash</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Get <a class="el" href="structlruhash.html" title="Hash table that keeps LRU list of entries.">lruhash</a> table for a given hash value. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>slabbed hash table. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>hash,:</em>&nbsp;</td><td>hash value. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>the lru hash table. </dd></dl>

<p>References <a class="el" href="slabhash_8h_source.html#l00065">slabhash::array</a>, and <a class="el" href="slabhash_8c_source.html#l00111">slab_idx()</a>.</p>

<p>Referenced by <a class="el" href="rrset_8c_source.html#l00092">rrset_cache_touch()</a>.</p>

</div>
</div><p>
<a class="anchor" name="cee5a72de3c5c6804fcb07a171b0a660"></a><!-- doxytag: member="slabhash.h::slabhash_setmarkdel" ref="cee5a72de3c5c6804fcb07a171b0a660" args="(struct slabhash *table, lruhash_markdelfunc_t md)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void slabhash_setmarkdel           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structslabhash.html">slabhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#b66fdcecf0922f195c9588ef39b2d4d0">lruhash_markdelfunc_t</a>&nbsp;</td>
          <td class="paramname"> <em>md</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Set markdel function. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>slabbed hash table. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>md,:</em>&nbsp;</td><td>markdel function ptr. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="slabhash_8h_source.html#l00065">slabhash::array</a>, <a class="el" href="lruhash_8c_source.html#l00508">lruhash_setmarkdel()</a>, and <a class="el" href="slabhash_8h_source.html#l00059">slabhash::size</a>.</p>

<p>Referenced by <a class="el" href="rrset_8c_source.html#l00057">rrset_cache_create()</a>.</p>

</div>
</div><p>
<a class="anchor" name="4267cde1b52474814f48859700e4ece9"></a><!-- doxytag: member="slabhash.h::slabhash_traverse" ref="4267cde1b52474814f48859700e4ece9" args="(struct slabhash *table, int wr, void(*func)(struct lruhash_entry *, void *), void *arg)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void slabhash_traverse           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structslabhash.html">slabhash</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>wr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void(*)(struct <a class="el" href="structlruhash__entry.html">lruhash_entry</a> *, void *)&nbsp;</td>
          <td class="paramname"> <em>func</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>arg</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Traverse a <a class="el" href="structslabhash.html" title="Hash table formed from several smaller ones.">slabhash</a>. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>slabbed hash table. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>wr,:</em>&nbsp;</td><td>if true, writelock is obtained, otherwise readlock. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>func,:</em>&nbsp;</td><td>function to call for every element. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>arg,:</em>&nbsp;</td><td>user argument to function. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="slabhash_8h_source.html#l00065">slabhash::array</a>, <a class="el" href="lruhash_8c_source.html#l00516">lruhash_traverse()</a>, and <a class="el" href="slabhash_8h_source.html#l00059">slabhash::size</a>.</p>

<p>Referenced by <a class="el" href="remote_8c_source.html#l01165">do_flush_zone()</a>.</p>

</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Tue Oct 13 06:46:33 2009 for unbound by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
</body>
</html>