add a refcount to library init/cleanup

Add a refcount around mosquitto_lib_init and mosquitto_lib_cleanup so
that multiple calls to init/cleanup don't trigger memory leaks or
double-frees.

Signed-off-by: Martin Kelly <mkelly@xevo.com>
pull/1658/merge
Martin Kelly 5 years ago committed by Roger A. Light
parent 22ffefe7f6
commit 8d54aaef89

@ -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,6 +47,9 @@ 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());
#elif _POSIX_TIMERS>0 && defined(_POSIX_MONOTONIC_CLOCK)
@ -65,12 +69,25 @@ int mosquitto_lib_init(void)
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)
{
if (init_refcount == 1) {
net__cleanup();
}
if (init_refcount > 0) {
--init_refcount;
}
return MOSQ_ERR_SUCCESS;
}

Loading…
Cancel
Save