@ -33,6 +33,7 @@ Contributors:
# include "packet_mosq.h"
# include "will_mosq.h"
static unsigned int init_refcount = 0 ;
void mosquitto__destroy ( struct mosquitto * mosq ) ;
@ -46,31 +47,47 @@ int mosquitto_lib_version(int *major, int *minor, int *revision)
int mosquitto_lib_init ( void )
{
int rc ;
if ( init_refcount = = 0 ) {
# ifdef WIN32
srand ( GetTickCount64 ( ) ) ;
srand ( GetTickCount64 ( ) ) ;
# elif _POSIX_TIMERS>0 && defined(_POSIX_MONOTONIC_CLOCK)
struct timespec tp ;
struct timespec tp ;
clock_gettime ( CLOCK_MONOTONIC , & tp ) ;
srand ( tp . tv_nsec ) ;
clock_gettime ( CLOCK_MONOTONIC , & tp ) ;
srand ( tp . tv_nsec ) ;
# elif defined(__APPLE__)
uint64_t ticks ;
uint64_t ticks ;
ticks = mach_absolute_time ( ) ;
srand ( ( unsigned int ) ticks ) ;
ticks = mach_absolute_time ( ) ;
srand ( ( unsigned int ) ticks ) ;
# else
struct timeval tv ;
struct timeval tv ;
gettimeofday ( & tv , NULL ) ;
srand ( tv . tv_sec * 1000 + tv . tv_usec / 1000 ) ;
gettimeofday ( & tv , NULL ) ;
srand ( tv . tv_sec * 1000 + tv . tv_usec / 1000 ) ;
# endif
return net__init ( ) ;
rc = net__init ( ) ;
if ( rc ! = MOSQ_ERR_SUCCESS ) {
return rc ;
}
}
init_refcount + + ;
return MOSQ_ERR_SUCCESS ;
}
int mosquitto_lib_cleanup ( void )
{
net__cleanup ( ) ;
if ( init_refcount = = 1 ) {
net__cleanup ( ) ;
}
if ( init_refcount > 0 ) {
- - init_refcount ;
}
return MOSQ_ERR_SUCCESS ;
}