mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-26 07:11:34 -08:00
384 lines
No EOL
28 KiB
HTML
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 — 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> »</li>
|
|
<li><a href="index.html" accesskey="U">Reference</a> »</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
|
|
“special value” 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’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’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’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">'compilation-error-regexp-alist</span>
|
|
<span class="o">'</span><span class="p">(</span><span class="s">"MPS ASSERTION FAILURE: .*\n\\(.*\\)\n\\([0-9]+\\)"</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->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)->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’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->class->attr</span> <span class="pre">&</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&view=status%3dopen&display=Job:Priority:Title&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> »</li>
|
|
<li><a href="index.html" >Reference</a> »</li>
|
|
</ul>
|
|
</div>
|
|
<div class="footer">
|
|
© <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> |