1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-26 07:11:34 -08:00
emacs/mps/manual/html/topic/error.html
Gareth Rees 6cbd932e05 Updated manual html
Copied from Perforce
 Change: 182092
 ServerID: perforce.ravenbrook.com
2013-05-22 19:26:41 +01:00

384 lines
No EOL
28 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>3. Error handing &mdash; Memory Pool System 1.111.0 documentation</title>
<link rel="stylesheet" href="../_static/mps.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
VERSION: '1.111.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<link rel="copyright" title="Copyright" href="../copyright.html" />
<link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" />
<link rel="up" title="Reference" href="index.html" />
<link rel="next" title="4. Arenas" href="arena.html" />
<link rel="prev" title="2. Keyword arguments" href="keyword.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="arena.html" title="4. Arenas"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="keyword.html" title="2. Keyword arguments"
accesskey="P">previous</a> |</li>
<li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> &raquo;</li>
<li><a href="index.html" accesskey="U">Reference</a> &raquo;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<div class="section" id="error-handing">
<span id="topic-error"></span><span id="index-0"></span><h1>3. Error handing<a class="headerlink" href="#error-handing" title="Permalink to this headline"></a></h1>
<p>Operations in the Memory Pool System that might fail return a
<a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result code</em></a> of type <a class="reference internal" href="#mps_res_t" title="mps_res_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_res_t</span></tt></a>, rather than a
&#8220;special value&#8221; of the return type.</p>
<p>Success is always indicated by the result code <a class="reference internal" href="#MPS_RES_OK" title="MPS_RES_OK"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_OK</span></tt></a>,
which is defined to be zero. Other result codes indicate failure, and
are non-zero.</p>
<p>The modular nature of the MPS means that it is not usually possible
for a function description to list the possible error codes that it
might return. A function in the public interface typically calls
methods of an <a class="reference internal" href="../glossary/a.html#term-arena-class"><em class="xref std std-term">arena class</em></a> and one or more <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool
classes</em></a>, any of which might fail. The MPS is extensible with new
arena and pool classes, which might fail in new and interesting ways,
so the only future-proof behaviour is for a <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client program</em></a> to
assume that any MPS function that returns a result code can return
<em>any</em> result code.</p>
<dl class="type">
<dt id="mps_res_t">
<tt class="descname">mps_res_t</tt><a class="headerlink" href="#mps_res_t" title="Permalink to this definition"></a></dt>
<dd><p>The type of <a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result codes</em></a>. It is a
<a class="reference internal" href="../glossary/t.html#term-transparent-type"><em class="xref std std-term">transparent alias</em></a> for <tt class="docutils literal"><span class="pre">int</span></tt>, provided
for convenience and clarity.</p>
<p>A result code indicates the success or failure of an operation,
along with the reason for failure. As with error numbers in Unix,
the meaning of a result code depends on the call that returned it.
Refer to the documentation of the function for the exact meaning
of each result code.</p>
<p>The result codes are:</p>
<ul class="simple">
<li><a class="reference internal" href="#MPS_RES_OK" title="MPS_RES_OK"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_OK</span></tt></a>: operation succeeded.</li>
<li><a class="reference internal" href="#MPS_RES_FAIL" title="MPS_RES_FAIL"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_FAIL</span></tt></a>: operation failed.</li>
<li><a class="reference internal" href="#MPS_RES_IO" title="MPS_RES_IO"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_IO</span></tt></a>: an input/output error occurred.</li>
<li><a class="reference internal" href="#MPS_RES_LIMIT" title="MPS_RES_LIMIT"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_LIMIT</span></tt></a>: an internal limitation was exceeded.</li>
<li><a class="reference internal" href="#MPS_RES_MEMORY" title="MPS_RES_MEMORY"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_MEMORY</span></tt></a>: needed memory could not be obtained.</li>
<li><a class="reference internal" href="#MPS_RES_RESOURCE" title="MPS_RES_RESOURCE"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_RESOURCE</span></tt></a>: a needed resource could not be
obtained.</li>
<li><a class="reference internal" href="#MPS_RES_UNIMPL" title="MPS_RES_UNIMPL"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_UNIMPL</span></tt></a>: operation is not implemented.</li>
<li><a class="reference internal" href="#MPS_RES_COMMIT_LIMIT" title="MPS_RES_COMMIT_LIMIT"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_COMMIT_LIMIT</span></tt></a>: the arena&#8217;s <a class="reference internal" href="../glossary/c.html#term-commit-limit"><em class="xref std std-term">commit
limit</em></a> would be exceeded.</li>
<li><a class="reference internal" href="#MPS_RES_PARAM" title="MPS_RES_PARAM"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_PARAM</span></tt></a>: an invalid parameter was passed.</li>
</ul>
</dd></dl>
<div class="section" id="result-codes">
<h2>3.1. Result codes<a class="headerlink" href="#result-codes" title="Permalink to this headline"></a></h2>
<dl class="macro">
<dt id="MPS_RES_COMMIT_LIMIT">
<tt class="descname">MPS_RES_COMMIT_LIMIT</tt><a class="headerlink" href="#MPS_RES_COMMIT_LIMIT" title="Permalink to this definition"></a></dt>
<dd><p>A <a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result code</em></a> indicating that an operation could not be
completed as requested without exceeding the <a class="reference internal" href="../glossary/c.html#term-commit-limit"><em class="xref std std-term">commit limit</em></a>.</p>
<p>You need to deallocate something to make more space, or increase
the commit limit by calling <a class="reference internal" href="arena.html#mps_arena_commit_limit_set" title="mps_arena_commit_limit_set"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_commit_limit_set()</span></tt></a>.</p>
</dd></dl>
<dl class="macro">
<dt id="MPS_RES_FAIL">
<tt class="descname">MPS_RES_FAIL</tt><a class="headerlink" href="#MPS_RES_FAIL" title="Permalink to this definition"></a></dt>
<dd><p>A <a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result code</em></a> indicating that something went wrong that
does not fall under the description of any other result code. The
exact meaning depends on the function that returned this result
code.</p>
</dd></dl>
<dl class="macro">
<dt id="MPS_RES_IO">
<tt class="descname">MPS_RES_IO</tt><a class="headerlink" href="#MPS_RES_IO" title="Permalink to this definition"></a></dt>
<dd><p>A <a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result code</em></a> indicating that an input/output error
occurred. The exact meaning depends on the function that returned
this result code.</p>
</dd></dl>
<dl class="macro">
<dt id="MPS_RES_LIMIT">
<tt class="descname">MPS_RES_LIMIT</tt><a class="headerlink" href="#MPS_RES_LIMIT" title="Permalink to this definition"></a></dt>
<dd><p>A <a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result code</em></a> indicating that an operation could not be
completed as requested because of an internal limitation of the
MPS. The exact meaning depends on the function that returned this
result code.</p>
</dd></dl>
<dl class="macro">
<dt id="MPS_RES_MEMORY">
<tt class="descname">MPS_RES_MEMORY</tt><a class="headerlink" href="#MPS_RES_MEMORY" title="Permalink to this definition"></a></dt>
<dd><p>A <a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result code</em></a> indicating that an operation could not be
completed because there wasn&#8217;t enough memory available.</p>
<p>You need to deallocate something or allow the <a class="reference internal" href="../glossary/g.html#term-garbage-collector"><em class="xref std std-term">garbage
collector</em></a> to reclaim something to free enough memory, or expand
the <a class="reference internal" href="../glossary/a.html#term-arena"><em class="xref std std-term">arena</em></a> (if you&#8217;re using an arena for which that does
not happen automatically).</p>
<div class="admonition-note admonition">
<p class="first admonition-title">Note</p>
<p>Failing to acquire enough memory because the <a class="reference internal" href="../glossary/c.html#term-commit-limit"><em class="xref std std-term">commit
limit</em></a> would have been exceeded is indicated by returning
<a class="reference internal" href="#MPS_RES_COMMIT_LIMIT" title="MPS_RES_COMMIT_LIMIT"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_COMMIT_LIMIT</span></tt></a>, not <tt class="docutils literal"><span class="pre">MPS_RES_MEMORY</span></tt>.</p>
<p class="last">Running out of <a class="reference internal" href="../glossary/a.html#term-address-space"><em class="xref std std-term">address space</em></a> (as might happen in
<a class="reference internal" href="../glossary/v.html#term-virtual-memory"><em class="xref std std-term">virtual memory</em></a> systems) is indicated by returning
<a class="reference internal" href="#MPS_RES_RESOURCE" title="MPS_RES_RESOURCE"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_RESOURCE</span></tt></a>, not <tt class="docutils literal"><span class="pre">MPS_RES_MEMORY</span></tt>.</p>
</div>
</dd></dl>
<dl class="macro">
<dt id="MPS_RES_OK">
<tt class="descname">MPS_RES_OK</tt><a class="headerlink" href="#MPS_RES_OK" title="Permalink to this definition"></a></dt>
<dd><p>A <a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result code</em></a> indicating that an operation succeeded.</p>
<p>If a function takes an <a class="reference internal" href="../glossary/o.html#term-out-parameter"><em class="xref std std-term">out parameter</em></a> or an <a class="reference internal" href="../glossary/i.html#term-in-out-parameter"><em class="xref std std-term">in/out
parameter</em></a>, this parameter will only be updated if
<a class="reference internal" href="#MPS_RES_OK" title="MPS_RES_OK"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_OK</span></tt></a> is returned. If any other result code is
returned, the parameter will be left untouched by the function.</p>
<p><a class="reference internal" href="#MPS_RES_OK" title="MPS_RES_OK"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_OK</span></tt></a> is zero.</p>
</dd></dl>
<dl class="macro">
<dt id="MPS_RES_PARAM">
<tt class="descname">MPS_RES_PARAM</tt><a class="headerlink" href="#MPS_RES_PARAM" title="Permalink to this definition"></a></dt>
<dd><p>A <a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result code</em></a> indicating that an operation could not be
completed as requested because an invalid parameter was passed to
the operation. The exact meaning depends on the function that
returned this result code.</p>
</dd></dl>
<dl class="macro">
<dt id="MPS_RES_RESOURCE">
<tt class="descname">MPS_RES_RESOURCE</tt><a class="headerlink" href="#MPS_RES_RESOURCE" title="Permalink to this definition"></a></dt>
<dd><p>A <a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result code</em></a> indicating that an operation could not be
completed as requested because the MPS could not obtain a needed
resource. The resource in question depends on the operation.</p>
<p>Two special cases have their own result codes: when the MPS runs
out of committed memory, it returns <a class="reference internal" href="#MPS_RES_MEMORY" title="MPS_RES_MEMORY"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_MEMORY</span></tt></a>, and
when it cannot proceed without exceeding the <a class="reference internal" href="../glossary/c.html#term-commit-limit"><em class="xref std std-term">commit limit</em></a>,
it returns <a class="reference internal" href="#MPS_RES_COMMIT_LIMIT" title="MPS_RES_COMMIT_LIMIT"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_COMMIT_LIMIT</span></tt></a>.</p>
<p>This result code can be returned when the MPS runs out of
<a class="reference internal" href="../glossary/v.html#term-virtual-memory"><em class="xref std std-term">virtual memory</em></a>. If this happens, you need to reclaim
memory within your process (as for the result code
<a class="reference internal" href="#MPS_RES_MEMORY" title="MPS_RES_MEMORY"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_MEMORY</span></tt></a>), or terminate other processes running
on the same machine.</p>
</dd></dl>
<dl class="macro">
<dt id="MPS_RES_UNIMPL">
<tt class="descname">MPS_RES_UNIMPL</tt><a class="headerlink" href="#MPS_RES_UNIMPL" title="Permalink to this definition"></a></dt>
<dd><p>A <a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result code</em></a> indicating that an operation, or some vital
part of it, is not implemented.</p>
<p>This might be returned by functions that are no longer supported,
or by operations that are included for future expansion, but not
yet supported.</p>
</dd></dl>
</div>
<div class="section" id="assertions">
<span id="topic-error-assertion"></span><span id="index-1"></span><h2>3.2. Assertions<a class="headerlink" href="#assertions" title="Permalink to this headline"></a></h2>
<p>Bugs in the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client program</em></a> may violate the invariants that the
MPS relies on. Most functions in the MPS (in most <em>varieties</em>; see
below) assert the correctness of their data structures, so these bugs
will often be discovered by an assertion failure in the MPS. The
section <a class="reference internal" href="#topic-error-cause"><em>Common assertions and their causes</em></a> below lists commonly encountered
assertions and explains the kinds of client program bugs that can
provoke these assertions.</p>
<p>It is very rare for an assertion to indicate a bug in the MPS rather
than the client program, but it is not unknown, so if you have made
every effort to track down the cause (see <a class="reference internal" href="../guide/debug.html#guide-debug"><em>Debugging with the Memory Pool System</em></a>) without
luck, <a class="reference internal" href="../contact.html#contact"><em>get in touch</em></a>.</p>
<p>If you are running your MPS-enabled program from Emacs via the
<tt class="docutils literal"><span class="pre">compile</span></tt> command, you will probably want to recognize MPS
assertions automatically, by adding the following to your <tt class="docutils literal"><span class="pre">.emacs</span></tt>:</p>
<div class="highlight-scheme"><div class="highlight"><pre><span class="p">(</span><span class="nf">add-to-list</span> <span class="ss">&#39;compilation-error-regexp-alist</span>
<span class="o">&#39;</span><span class="p">(</span><span class="s">&quot;MPS ASSERTION FAILURE: .*\n\\(.*\\)\n\\([0-9]+\\)&quot;</span> <span class="mi">1</span> <span class="mi">2</span><span class="p">))</span>
</pre></div>
</div>
</div>
<div class="section" id="common-assertions-and-their-causes">
<span id="topic-error-cause"></span><span id="index-2"></span><h2>3.3. Common assertions and their causes<a class="headerlink" href="#common-assertions-and-their-causes" title="Permalink to this headline"></a></h2>
<p>This section lists some commonly encountered assertions and suggests
likely causes. If you encounter an assertion not listed here (or an
assertion that is listed here but for which you discovered a different
cause), please <a class="reference internal" href="../contact.html#contact"><em>let us know</em></a> so that we can improve
this documentation.</p>
<p><tt class="docutils literal"><span class="pre">dbgpool.c:</span> <span class="pre">fencepost</span> <span class="pre">check</span> <span class="pre">on</span> <span class="pre">free</span></tt></p>
<blockquote>
<div>The client program wrote to a location after the end, or before
the beginning of an allocated block. See <a class="reference internal" href="debugging.html#topic-debugging"><em>Debugging pools</em></a>.</div></blockquote>
<p><tt class="docutils literal"><span class="pre">dbgpool.c:</span> <span class="pre">free</span> <span class="pre">space</span> <span class="pre">corrupted</span> <span class="pre">on</span> <span class="pre">release</span></tt></p>
<blockquote>
<div>The client program used an object after it was reclaimed. See
<a class="reference internal" href="debugging.html#topic-debugging"><em>Debugging pools</em></a>.</div></blockquote>
<p><tt class="docutils literal"><span class="pre">format.c:</span> <span class="pre">SigCheck</span> <span class="pre">Format:</span> <span class="pre">format</span></tt></p>
<blockquote>
<div>The client program called <a class="reference internal" href="pool.html#mps_pool_create_k" title="mps_pool_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create_k()</span></tt></a> for a
<a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> like <a class="reference internal" href="../pool/amc.html#pool-amc"><em>AMC (Automatic Mostly-Copying)</em></a> that requires a
<a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a>, but passed something other than a
<a class="reference internal" href="format.html#mps_fmt_t" title="mps_fmt_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_fmt_t</span></tt></a> for this argument.</div></blockquote>
<p><tt class="docutils literal"><span class="pre">lockix.c:</span> <span class="pre">res</span> <span class="pre">==</span> <span class="pre">0</span></tt></p>
<p><tt class="docutils literal"><span class="pre">lockw3.c:</span> <span class="pre">lock-&gt;claims</span> <span class="pre">==</span> <span class="pre">0</span></tt></p>
<blockquote>
<div>The client program has made a re-entrant call into the MPS. Look
at the backtrace to see what it was. Common culprits are
<a class="reference internal" href="../glossary/f.html#term-format-method"><em class="xref std std-term">format methods</em></a> and <a class="reference internal" href="../glossary/s.html#term-stepper-function"><em class="xref std std-term">stepper functions</em></a>.</div></blockquote>
<p><tt class="docutils literal"><span class="pre">mpsi.c:</span> <span class="pre">SizeIsAligned(size,</span> <span class="pre">BufferPool(buf)-&gt;alignment)</span></tt></p>
<blockquote>
<div>The client program reserved a block by calling
<a class="reference internal" href="allocation.html#mps_reserve" title="mps_reserve"><tt class="xref c c-func docutils literal"><span class="pre">mps_reserve()</span></tt></a> but neglected to round the size up to the
alignment required by the pool&#8217;s <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a>.</div></blockquote>
<p><tt class="docutils literal"><span class="pre">pool.c:</span> <span class="pre">(pool-&gt;class-&gt;attr</span> <span class="pre">&amp;</span> <span class="pre">AttrALLOC)</span> <span class="pre">!=</span> <span class="pre">0</span></tt></p>
<blockquote>
<div>The client program called <a class="reference internal" href="allocation.html#mps_alloc" title="mps_alloc"><tt class="xref c c-func docutils literal"><span class="pre">mps_alloc()</span></tt></a> on a pool that does
not support this form of allocation. Use an <a class="reference internal" href="../glossary/a.html#term-allocation-point"><em class="xref std std-term">allocation
point</em></a> instead.</div></blockquote>
<p><tt class="docutils literal"><span class="pre">poolams.c:</span> <span class="pre">!AMS_IS_INVALID_COLOUR(seg,</span> <span class="pre">i)</span></tt></p>
<blockquote>
<div>The client program failed to <a class="reference internal" href="../glossary/f.html#term-fix"><em class="xref std std-term">fix</em></a> a reference to an object
in an <a class="reference internal" href="../pool/ams.html#pool-ams"><em>AMS (Automatic Mark and Sweep)</em></a> pool, violating the <a class="reference internal" href="../glossary/t.html#term-tri-colour-invariant"><em class="xref std std-term">tri-colour
invariant</em></a> that the MPS depends on for the correctness of its
<a class="reference internal" href="../glossary/i.html#term-incremental-garbage-collection"><em class="xref std std-term">incremental garbage collection</em></a>.</div></blockquote>
<p><tt class="docutils literal"><span class="pre">poolams.c:</span> <span class="pre">AMS_ALLOCED(seg,</span> <span class="pre">i)</span></tt></p>
<blockquote>
<div>The client program tried to <a class="reference internal" href="../glossary/f.html#term-fix"><em class="xref std std-term">fix</em></a> a <a class="reference internal" href="../glossary/r.html#term-reference"><em class="xref std std-term">reference</em></a> to a
block in an <a class="reference internal" href="../pool/ams.html#pool-ams"><em>AMS (Automatic Mark and Sweep)</em></a> pool that died. This may mean that
there was a previous collection in which a reference that should
have kept the block alive failed to be scanned. Perhaps a
<a class="reference internal" href="../glossary/f.html#term-formatted-object"><em class="xref std std-term">formatted object</em></a> was updated in some way that has a race
condition?</div></blockquote>
</div>
<div class="section" id="varieties">
<span id="index-3"></span><h2>3.4. Varieties<a class="headerlink" href="#varieties" title="Permalink to this headline"></a></h2>
<p>The MPS has three behaviours with respect to internal checking and
<a class="reference internal" href="telemetry.html#topic-telemetry"><em>telemetry</em></a>, which need to be selected at
compile time, by defining one of the following preprocessor
constants. If none is specified then <a class="reference internal" href="#CONFIG_VAR_HOT" title="CONFIG_VAR_HOT"><tt class="xref c c-macro docutils literal"><span class="pre">CONFIG_VAR_HOT</span></tt></a> is the
default.</p>
<span class="target" id="index-4"></span><dl class="macro">
<dt id="CONFIG_VAR_COOL">
<tt class="descname">CONFIG_VAR_COOL</tt><a class="headerlink" href="#CONFIG_VAR_COOL" title="Permalink to this definition"></a></dt>
<dd><p>The cool variety is intended for development and testing.</p>
<p>All functions check the consistency of their data structures and
may assert, including functions on the <a class="reference internal" href="../glossary/c.html#term-critical-path"><em class="xref std std-term">critical path</em></a>.</p>
<p>All events are sent to the <a class="reference internal" href="../glossary/t.html#term-telemetry-stream"><em class="xref std std-term">telemetry stream</em></a>, including
events on the <a class="reference internal" href="../glossary/c.html#term-critical-path"><em class="xref std std-term">critical path</em></a>.</p>
</dd></dl>
<span class="target" id="index-5"></span><dl class="macro">
<dt id="CONFIG_VAR_HOT">
<tt class="descname">CONFIG_VAR_HOT</tt><a class="headerlink" href="#CONFIG_VAR_HOT" title="Permalink to this definition"></a></dt>
<dd><p>The hot variety is intended for production and deployment.</p>
<p>Some functions check the consistency of their data structures and
may assert, namely those not on the <a class="reference internal" href="../glossary/c.html#term-critical-path"><em class="xref std std-term">critical path</em></a>.</p>
<p>Some events are sent to the telemetry stream, namely those not on
the <a class="reference internal" href="../glossary/c.html#term-critical-path"><em class="xref std std-term">critical path</em></a>.</p>
</dd></dl>
<span class="target" id="index-6"></span><dl class="macro">
<dt id="CONFIG_VAR_RASH">
<tt class="descname">CONFIG_VAR_RASH</tt><a class="headerlink" href="#CONFIG_VAR_RASH" title="Permalink to this definition"></a></dt>
<dd><p>The rash variety is intended for mature integrations, or for
developers who like living dangerously.</p>
<p>No functions check the consistency of their data structures and
consequently there are no assertions.</p>
<p>No events are sent to the telemetry stream.</p>
</dd></dl>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/logo.png" alt="Logo"/>
</a></p>
<h3><a href="../index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">3. Error handing</a><ul>
<li><a class="reference internal" href="#result-codes">3.1. Result codes</a></li>
<li><a class="reference internal" href="#assertions">3.2. Assertions</a></li>
<li><a class="reference internal" href="#common-assertions-and-their-causes">3.3. Common assertions and their causes</a></li>
<li><a class="reference internal" href="#varieties">3.4. Varieties</a></li>
</ul>
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="keyword.html"
title="previous chapter">2. Keyword arguments</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="arena.html"
title="next chapter">4. Arenas</a></p><h4>Downloads</h4>
<p class="topless">
<a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br>
<a href="http://www.ravenbrook.com/project/mps/release/">All MPS Kit releases</a>
</p>
<h4>Issues</h4>
<p class="topless">
<a href="http://www.ravenbrook.com/project/mps/issue/?action=list&amp;view=status%3dopen&amp;display=Job:Priority:Title&amp;sort=Priority">Known issues</a><br>
<a href="http://www.ravenbrook.com/project/mps/issue/?action=fixed&release_fixed=1.111.0">Issues fixed in release 1.111.0</a>
</p><h4>Contact us</h4>
<p class="topless"><a href="mailto:mps-questions@ravenbrook.com">mps-questions@ravenbrook.com</a></p>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="arena.html" title="4. Arenas"
>next</a> |</li>
<li class="right" >
<a href="keyword.html" title="2. Keyword arguments"
>previous</a> |</li>
<li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> &raquo;</li>
<li><a href="index.html" >Reference</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; <a href="../copyright.html">Copyright</a> 2013, Ravenbrook Limited.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
</div>
</body>
</html>