



@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 could lead to a
memory leak or even a crash.  To handle this, your application should 
invoke this function after aquiring a thread mutex.  

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