



@deftypefun {int} {gnutls_global_init} ( @var{void})

This function initializes the global data to defaults.  
In order to free resources you may call @code{gnutls_global_deinit()}  
when gnutls usage is no longer needed.

Note that this function will also initialize the underlying crypto
backend, if it has not been initialized before.  

This function increments a global counter, so that
@code{gnutls_global_deinit()}  only releases resources when it has been
called as many times as @code{gnutls_global_init()} .  This is useful when
GnuTLS is used by more than one library in an application.  This
function can be called many times, but will only do something the
first time.

Note!  This function is not thread safe.  If two threads call this
function simultaneously, they can cause a race between checking
the global counter and incrementing it, causing both threads to
execute the library initialization code.  That would lead to a
memory leak.  To handle this, your application could invoke this
function after aquiring a thread mutex.  To ignore the potential
memory leak is also an option.

@strong{Returns:} On success, @code{GNUTLS_E_SUCCESS}  (0) is returned,
otherwise a negative error code is returned.
@end deftypefun
