Commit 82272550 authored by Matt Caswell's avatar Matt Caswell
Browse files

Add clarification to docs on ASYNC_free_pool()



Clarify that you must only call this after all async jobs have
completed - otherwise you could get memory leaks.

Reviewed-by: default avatarRich Salz <rsalz@openssl.org>
parent 000cc411
Loading
Loading
Loading
Loading
+14 −10
Original line number Original line Diff line number Diff line
@@ -37,16 +37,20 @@ any of the asynchronous job functions, user code should first call
ASYNC_init_pool(). If the user application is multi-threaded, then this should
ASYNC_init_pool(). If the user application is multi-threaded, then this should
be done for each thread that will initiate asynchronous jobs. Before user code
be done for each thread that will initiate asynchronous jobs. Before user code
exits it should free the pool up (for each thread where a pool was initialised)
exits it should free the pool up (for each thread where a pool was initialised)
using ASYNC_free_pool(). The B<max_size> argument limits the number of
using ASYNC_free_pool(). No asynchronous jobs must be outstanding for the thread
ASYNC_JOBs that will be held in the pool. If B<max_size> is set to 0 then no
when ASYNC_free_pool() is called. Failing to ensure this will result in memory
upper limit is set. When an ASYNC_JOB is needed but there are none available in
leaks.
the pool already then one will be automatically created, as long as the total

of ASYNC_JOBs managed by the pool does not exceed B<max_size>. When the pool is
The B<max_size> argument limits the number of ASYNC_JOBs that will be held in
first initialised B<init_size> ASYNC_JOBs will be created immediately. If
the pool. If B<max_size> is set to 0 then no upper limit is set. When an
ASYNC_init_pool() is not called before the pool is first used then it will be
ASYNC_JOB is needed but there are none available in the pool already then one
called automatically with a B<max_size> of 0 (no upper limit) and an
will be automatically created, as long as the total of ASYNC_JOBs managed by the
B<init_size> of 0 (no ASYNC_JOBs created up front). If a pool is created in this
pool does not exceed B<max_size>. When the pool is first initialised
way it must still be cleaned up with an explicit call to ASYNC_free_pool().
B<init_size> ASYNC_JOBs will be created immediately. If ASYNC_init_pool() is not
called before the pool is first used then it will be called automatically with a
B<max_size> of 0 (no upper limit) and an B<init_size> of 0 (no ASYNC_JOBs
created up front). If a pool is created in this way it must still be cleaned up
with an explicit call to ASYNC_free_pool().


An asynchronous job is started by calling the ASYNC_start_job() function.
An asynchronous job is started by calling the ASYNC_start_job() function.
Initially B<*job> should be NULL. B<ret> should point to a location where the
Initially B<*job> should be NULL. B<ret> should point to a location where the