On Wed, Oct 7, 2009 at 11:05 AM, Thomas Harning Jr.
<thomas.harn...@trustbearer.com> wrote:
> I'm writing a browser and a library that use OpenSSL for cryptography
(correction - browser plugin)

> support.  I want to best be able to fully cleanup state when my
> plugin/library is unloaded, however it seems to me that it's not
> possible to clear out all thread-associated error state since I'm not
> managing the threads accessing my code.
>
> Example:
>  Thread A - loads plugin
>  Thread B - access plugin code (note: thread-safe)
>       plugin code raises OpenSSL error... cleans out error stack
> after reporting
>  Thread A - unloads plugin, tries to cleanup OpenSSL
>
> Thread B's actual state is not freed since it is unknown to the plugin
> code whether a given thread is "done" accessing code.  In thread A
> during shutdown, it only knows about thread A and the need to clean
> it's state.
>
> One option would be to keep around a hash-set of threads that have
> ever accessed the plugin code, but that's expensive, not to mention a
> duplication of what OpenSSL's separate error hashmap does.
>
>
> Looking at the old messages on the mailing list, there was a patch for
> NetWare that introduced: `ERR_free_state_table`... however it was
> never included since it was discussed that "proper applications
> shouldn't need it".... however that doesn't account for plugins that
> do not manage threads aside from locking access to resources...
>
> I have tested the patch re-created for the 1.0.0 OpenSSL tree and it
> seems to work perfectly.  Attached is that patch... I know, OpenSSL
> 1.0.0 is in feature-freeze state... but this should be useful to
> others.  Let me know if there's any other requirements if this patch
> were to possibly be included in the future (1.0.0a?)
>
> Are there any alternate solutions?  I tried looking at the following
> possible options:
>  * ERR_get_err_state_table()+ ERR_release_err_state_table()
>   .. but that does no freeing, it just decrements reference count...
>  * ERR_get_err_state_table + manually killing all ERR_STATE's ... then
> destroying table ... but that results in int_thread_hash pointing to
> dead memory...

Has anyone reviewed this or have any comments to make?  I'd love to
know of a better mechanism than patching OpenSSL each time we need a
build of it (not frequently, but its nice to have an official
solution)


-- 
Thomas Harning Jr.
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to