
#use wml::openssl-macros area=docs page=SSL_SESSION_free

<title>Documents, SSL_SESSION_free(3)</title>

<h1>SSL_SESSION_free(3)</h1>

#use wml::imp::generic

{:
## What's this? [[s|(<STRONG>[^<].+?)</A>(</STRONG><DD>)|$1$2|sg]]
[[s|<P>\s+<P>|<P>|sg]]
[[s|<P>\s+</|</|sg]]
[[s|<DD>\s*<DT>|<DD>&nbsp;<DT>|sg]]
[[s|<DD>\s*</DL>|<DD>&nbsp;</DL>|sg]]
[[s|\[|&#91;|sg]]
[[s|\]|&#93;|sg]]

<!-- INDEX BEGIN -->

<UL>

	<LI><A HREF="#NAME">NAME</A>
	<LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
	<LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
	<LI><A HREF="#NOTES">NOTES</A>
	<LI><A HREF="#RETURN_VALUES">RETURN VALUES</A>
	<LI><A HREF="#SEE_ALSO">SEE ALSO</A>
</UL>
<!-- INDEX END -->

<HR>
<P>
<HR>
<H1><A NAME="NAME">NAME</A></H1>
<P>
SSL_SESSION_free - free an allocated SSL_SESSION structure

</P>
<P>
<HR>
<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
<PRE> #include &lt;openssl/ssl.h&gt;
</PRE>
<PRE> void SSL_SESSION_free(SSL_SESSION *session);
</PRE>
<P>
<HR>
<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
<P>
<CODE>SSL_SESSION_free()</CODE> decrements the reference count of <STRONG>session</STRONG> and removes the <STRONG>SSL_SESSION</STRONG> structure pointed to by <STRONG>session</STRONG> and frees up the allocated memory, if the the reference count has reached
0.

</P>
<P>
<HR>
<H1><A NAME="NOTES">NOTES</A></H1>
<P>
SSL_SESSION objects are allocated, when a TLS/SSL handshake operation is
successfully completed. Depending on the settings, see
<A HREF="../ssl/SSL_CTX_set_session_cache_mode.html#">SSL_CTX_set_session_cache_mode(3)</A>, the SSL_SESSION objects are internally referenced by the SSL_CTX and
linked into its session cache. SSL objects may be using the SSL_SESSION
object; as a session may be reused, several SSL objects may be using one
SSL_SESSION object at the same time. It is therefore crucial to keep the
reference count (usage information) correct and not delete a SSL_SESSION
object that is still used, as this may lead to program failures due to
dangling pointers. These failures may also appear delayed, e.g. when an
SSL_SESSION object was completely freed as the reference count incorrectly
became 0, but it is still referenced in the internal session cache and the
cache list is processed during a
<A HREF="../ssl/SSL_CTX_flush_sessions.html#">SSL_CTX_flush_sessions(3)</A> operation.

</P>
<P>
<CODE>SSL_SESSION_free()</CODE> must only be called for SSL_SESSION
objects, for which the reference count was explicitly incremented (e.g. by
calling <CODE>SSL_get1_session(),</CODE> see <A HREF="../ssl/SSL_get_session.html#">SSL_get_session(3)</A>) or when the SSL_SESSION object was generated outside a TLS handshake
operation, e.g. by using <A HREF="../ssl/d2i_SSL_SESSION.html#">d2i_SSL_SESSION(3)</A>. It must not be called on other SSL_SESSION objects, as this would cause
incorrect reference counts and therefore program failures.

</P>
<P>
<HR>
<H1><A NAME="RETURN_VALUES">RETURN VALUES</A></H1>
<P>
<CODE>SSL_SESSION_free()</CODE> does not provide diagnostic information.

</P>
<P>
<HR>
<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
<P>
<A HREF="../ssl/ssl.html#">ssl(3)</A>, <A HREF="../ssl/SSL_get_session.html#">SSL_get_session(3)</A>,
<A HREF="../ssl/SSL_CTX_set_session_cache_mode.html#">SSL_CTX_set_session_cache_mode(3)</A>,
<A HREF="../ssl/SSL_CTX_flush_sessions.html#">SSL_CTX_flush_sessions(3)</A>,
 <A HREF="../ssl/d2i_SSL_SESSION.html#">d2i_SSL_SESSION(3)</A>



</P>
:}

