Sophie

Sophie

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

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.c 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.c File Reference</h1>Implementation of hash table that consists of smaller hash tables.  
<a href="#_details">More...</a>
<p>
<code>#include &quot;config.h&quot;</code><br>
<code>#include &quot;<a class="el" href="slabhash_8h.html">util/storage/slabhash.h</a>&quot;</code><br>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></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_8c.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_8c.html#f9f62f4822b78ef72bbd4714da759494">slabhash_delete</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *sl)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Delete hash table.  <a href="#f9f62f4822b78ef72bbd4714da759494"></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_8c.html#57f1dec1545ae4d6052f3532069d190d">slabhash_clear</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *sl)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clear hash table.  <a href="#57f1dec1545ae4d6052f3532069d190d"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="359e920c40e904da49b3f4b9ab8ca109"></a><!-- doxytag: member="slabhash.c::slab_idx" ref="359e920c40e904da49b3f4b9ab8ca109" args="(struct slabhash *sl, hashvalue_t hash)" -->
static unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8c.html#359e920c40e904da49b3f4b9ab8ca109">slab_idx</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *sl, <a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a> hash)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">helper routine to calculate the <a class="el" href="structslabhash.html" title="Hash table formed from several smaller ones.">slabhash</a> index <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_8c.html#9027464af58851cf6337ebae4d774e84">slabhash_insert</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *sl, <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 *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Insert a new element into the hashtable, uses lruhash_insert.  <a href="#9027464af58851cf6337ebae4d774e84"></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_8c.html#a446f7a02ecb0148cf3581498a5dfc61">slabhash_lookup</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *sl, <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="#a446f7a02ecb0148cf3581498a5dfc61"></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_8c.html#ee0e0cda1d771ce8f47521706cb2117c">slabhash_remove</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *sl, <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="#ee0e0cda1d771ce8f47521706cb2117c"></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_8c.html#47a8bac2038f7ababac81bf3d287479f">slabhash_status</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *sl, 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="#47a8bac2038f7ababac81bf3d287479f"></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_8c.html#0cbd1f97c1c4a15467d9261b0cd90494">slabhash_get_size</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *sl)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieve slab hash total size.  <a href="#0cbd1f97c1c4a15467d9261b0cd90494"></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_8c.html#b993283cb233363a5c473706dce0bc38">slabhash_get_mem</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *sl)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieve slab hash current memory use.  <a href="#b993283cb233363a5c473706dce0bc38"></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_8c.html#0d1aa0c4417fc1615e3c6c00411355aa">slabhash_gettable</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *sl, <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="#0d1aa0c4417fc1615e3c6c00411355aa"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5753a4ab2a193e359e1674824b8dc666"></a><!-- doxytag: member="slabhash.c::delkey" ref="5753a4ab2a193e359e1674824b8dc666" args="(struct slabhash_testkey *k)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8c.html#5753a4ab2a193e359e1674824b8dc666">delkey</a> (struct <a class="el" href="structslabhash__testkey.html">slabhash_testkey</a> *k)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">delete key <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6c38bd460f31a59dad7f8a03fea17ef8"></a><!-- doxytag: member="slabhash.c::deldata" ref="6c38bd460f31a59dad7f8a03fea17ef8" args="(struct slabhash_testdata *d)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8c.html#6c38bd460f31a59dad7f8a03fea17ef8">deldata</a> (struct <a class="el" href="structslabhash__testdata.html">slabhash_testdata</a> *d)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">delete data <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5554ddf7ec74f623c2ea6957d9ad79db"></a><!-- doxytag: member="slabhash.c::test_slabhash_sizefunc" ref="5554ddf7ec74f623c2ea6957d9ad79db" args="(void *key, void *data)" -->
size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8c.html#5554ddf7ec74f623c2ea6957d9ad79db">test_slabhash_sizefunc</a> (void *key, void *data)</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="bd21f88b3e577ff405b37df0c39ce495"></a><!-- doxytag: member="slabhash.c::test_slabhash_compfunc" ref="bd21f88b3e577ff405b37df0c39ce495" args="(void *key1, void *key2)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8c.html#bd21f88b3e577ff405b37df0c39ce495">test_slabhash_compfunc</a> (void *key1, void *key2)</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="713f4670b0c1bdc269297cb6ee34e4cf"></a><!-- doxytag: member="slabhash.c::test_slabhash_delkey" ref="713f4670b0c1bdc269297cb6ee34e4cf" args="(void *key, void *arg)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8c.html#713f4670b0c1bdc269297cb6ee34e4cf">test_slabhash_delkey</a> (void *key, void *arg)</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="09dbef1d17a87e3b97eeee83f2bb404a"></a><!-- doxytag: member="slabhash.c::test_slabhash_deldata" ref="09dbef1d17a87e3b97eeee83f2bb404a" args="(void *data, void *arg)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8c.html#09dbef1d17a87e3b97eeee83f2bb404a">test_slabhash_deldata</a> (void *data, void *arg)</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>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="slabhash_8c.html#9bd95b5243fa4cad6e5eca3068e7d0b8">slabhash_setmarkdel</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *sl, <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="#9bd95b5243fa4cad6e5eca3068e7d0b8"></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_8c.html#59e42fb8887b364f47dcb42e313ae934">slabhash_traverse</a> (struct <a class="el" href="structslabhash.html">slabhash</a> *sh, 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="#59e42fb8887b364f47dcb42e313ae934"></a><br></td></tr>
</table>
<hr><h2>Detailed Description</h2>
Implementation of hash table that consists of smaller hash tables. 
<p>
This results in a partitioned <a class="el" href="structlruhash.html" title="Hash table that keeps LRU list of entries.">lruhash</a> table. 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.c::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="f9f62f4822b78ef72bbd4714da759494"></a><!-- doxytag: member="slabhash.c::slabhash_delete" ref="f9f62f4822b78ef72bbd4714da759494" args="(struct slabhash *sl)" -->
<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="57f1dec1545ae4d6052f3532069d190d"></a><!-- doxytag: member="slabhash.c::slabhash_clear" ref="57f1dec1545ae4d6052f3532069d190d" args="(struct slabhash *sl)" -->
<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="9027464af58851cf6337ebae4d774e84"></a><!-- doxytag: member="slabhash.c::slabhash_insert" ref="9027464af58851cf6337ebae4d774e84" args="(struct slabhash *sl, hashvalue_t hash, struct lruhash_entry *entry, void *data, void *arg)" -->
<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="a446f7a02ecb0148cf3581498a5dfc61"></a><!-- doxytag: member="slabhash.c::slabhash_lookup" ref="a446f7a02ecb0148cf3581498a5dfc61" args="(struct slabhash *sl, 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="ee0e0cda1d771ce8f47521706cb2117c"></a><!-- doxytag: member="slabhash.c::slabhash_remove" ref="ee0e0cda1d771ce8f47521706cb2117c" args="(struct slabhash *sl, 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="47a8bac2038f7ababac81bf3d287479f"></a><!-- doxytag: member="slabhash.c::slabhash_status" ref="47a8bac2038f7ababac81bf3d287479f" args="(struct slabhash *sl, 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="0cbd1f97c1c4a15467d9261b0cd90494"></a><!-- doxytag: member="slabhash.c::slabhash_get_size" ref="0cbd1f97c1c4a15467d9261b0cd90494" args="(struct slabhash *sl)" -->
<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="b993283cb233363a5c473706dce0bc38"></a><!-- doxytag: member="slabhash.c::slabhash_get_mem" ref="b993283cb233363a5c473706dce0bc38" args="(struct slabhash *sl)" -->
<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="0d1aa0c4417fc1615e3c6c00411355aa"></a><!-- doxytag: member="slabhash.c::slabhash_gettable" ref="0d1aa0c4417fc1615e3c6c00411355aa" args="(struct slabhash *sl, 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="9bd95b5243fa4cad6e5eca3068e7d0b8"></a><!-- doxytag: member="slabhash.c::slabhash_setmarkdel" ref="9bd95b5243fa4cad6e5eca3068e7d0b8" args="(struct slabhash *sl, 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="59e42fb8887b364f47dcb42e313ae934"></a><!-- doxytag: member="slabhash.c::slabhash_traverse" ref="59e42fb8887b364f47dcb42e313ae934" args="(struct slabhash *sh, 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>