I'm having a time coming to grips with how mod_proxy's use of this relates to connections and how to document appropriately, and even with the usefulness of some advertised semantics of apr_reslist itself.

I guess at one time ttl was not respected except for the smax concept, that was useless for proxy or some other user, then reslist was modified so that ttl was checked during apr_reslist_acquire too; that left smax as only an obscure object management control -- when those unusable resources are garbage collected, and how much time should be spent on garbage collection.

IOW, since a resource exceeding ttl is completely unusable and enforced completely by apr_reslist_acquire(), the only reason to have smax is to force some amount of garbage collection during reslist maintenance, and furthermore the only reason not to set smax to a very low value (perhaps just eliminating the parameter from the API and always performing full garbage collection) is to avoid spending too much time cleaning up unusable resources during one maintenance cycle.

Index: include/apr_reslist.h
===================================================================
--- include/apr_reslist.h       (revision 987633)
+++ include/apr_reslist.h       (working copy)
@@ -69,11 +69,13 @@
  *                list will be stored.
  * @param min Allowed minimum number of available resources. Zero
  *            creates new resources only when needed.
- * @param smax Resources will be destroyed to meet this maximum
- *             restriction as they expire.
+ * @param smax Resources will be destroyed during reslist maintenance to
+ *             meet this maximum restriction as they expire (reach their ttl).
  * @param hmax Absolute maximum limit on the number of total resources.
- * @param ttl If non-zero, sets the maximum amount of time in microseconds a
- *            resource may be available while exceeding the soft limit.
+ * @param ttl If non-zero, sets the maximum amount of time in microseconds an
+ *            unused resource is valid.  Any resource which has exceeded this
+ *            time will be destroyed, either when encountered by
+ *            apr_reslist_acquire() or during reslist maintenance.
  * @param con Constructor routine that is called to create a new resource.
  * @param de Destructor routine that is called to destroy an expired resource.
  * @param params Passed to constructor and deconstructor