<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
    <title>Using APR Pools</title>
  </head>
  <body>
    <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>
