libtnc can be initialized more than once

This commit is contained in:
Martin Willi
2012-11-14 10:14:40 +01:00
parent de4c1def83
commit 07474b6062
+18
View File
@@ -40,6 +40,11 @@ struct private_tnc_t {
* Public members of tnc_t.
*/
tnc_t public;
/**
* Number of times we have been initialized
*/
refcount_t ref;
};
/**
@@ -54,9 +59,17 @@ void libtnccs_init(void)
{
private_tnc_t *this;
if (tnc)
{ /* already initialized, increase refcount */
this = (private_tnc_t*)tnc;
ref_get(&this->ref);
return;
}
INIT(this,
.public = {
},
.ref = 1,
);
tnc = &this->public;
@@ -69,6 +82,11 @@ void libtnccs_deinit(void)
{
private_tnc_t *this = (private_tnc_t*)tnc;
if (!this || !ref_put(&this->ref))
{ /* have more users */
return;
}
free(this);
tnc = NULL;
}