<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
    <title>Using APR Pools</title>
  </head>
  <body>
    <div align="right">
      Last modified at [$Date$]
    </div>

    <h1>Using APR Pools</h1>

    <p>
      From <a href="http://subversion.tigris.org/">Subversion</a>, we
      have learned a <em>lot</em> about how to use pools in a heavily
      structured/object-based environment.
      <a href="http://httpd.apache.org/">Apache httpd</a> is a
      completely different beast: "allocate a request pool. use
      it. destroy it."
    </p>

    <p>
      In a complex app, that request-style of behavior is not
      present. Luckily, the "proper" use of pools can be described in
      just a few rules:
    </p>

    <ul>
      <li>
        Objects should not have their own pools. An object is
        allocated into a pool defined by the constructor's caller. The
        <strong>caller</strong> knows the lifetime of the object and
        will manage it via the pool. Generally, this also means that
        objects will not have a "close" or a "free" since those
        operations will happen implicitly as part of the destruction
        of the pool the objects live within.
      </li>

      <li>
        <p>
          Functions should not create/destroy pools for their
          operation; they should use a pool provided by the
          caller. Again, the <strong>caller</strong> knows more about
          how the function will be used, how often, how many times,
          etc. Thus, it should be in charge of the function's memory
          usage.
        </p>
        <p>
          As an example, the caller might know that the app will exit
          upon the function's return. Thus, the function would be
          creating extra work if it built and destroyed a
          pool. Instead, it should use the passed-in pool, which the
          caller is going to be tossing as part of app-exit anyways.
        </p>
      </li>

      <li>
        <p>
          Whenever an unbounded iteration occurs, a subpool should be
          used. The general pattern is:
        </p>
        <blockquote>
          <pre>
subpool = apr_create_subpool(pool);
for (i = 0; i < n; ++i) {
  apr_pool_clear(subpool);

  do_operation(..., subpool);
}
apr_pool_destroy(subpool);</pre>
        </blockquote>
        <p>
          This pattern prevents the 'pool' from growing unbounded and
          consuming all of memory. Note that it is slightly more
          optimal to clear the pool on loop-entry. This pattern also
          allows for a '<tt>continue</tt>' to occur within the loop,
          yet still ensure the pool will be cleared.
        </p>
      </li>

      <li>
        Given all of the above, it is pretty well mandatory to pass a
        pool to <em>every</em> function. Since objects are not
        recording pools for themselves, and the caller is always
        supposed to be managing memory, then each function needs a
        pool, rather than relying on some hidden magic pool. In
        limited cases, objects may record the pool used for their
        construction so that they can construct sub-parts, but these
        cases should be examined carefully. Internal pools can lead to
        unbounded pool usage if the object is not careful.
      </li>
    </ul>

    <hr>
    <address>Greg Stein</address>
    <!-- Created: Wed Jun 25 14:39:57 PDT 2003 -->
    <!-- hhmts start -->
Last modified: Wed Jun 25 14:50:19 PDT 2003
<!-- hhmts end -->

</body></html>
