lock the set_message_types() method

This commit is contained in:
Andreas Steffen
2011-05-07 17:51:53 +02:00
parent 2c3464af46
commit ff30e06bf0
+17 -1
View File
@@ -19,11 +19,12 @@
#include <debug.h> #include <debug.h>
#include <library.h> #include <library.h>
#include <threading/mutex.h>
typedef struct private_tnc_imc_t private_tnc_imc_t; typedef struct private_tnc_imc_t private_tnc_imc_t;
/** /**
* Private data of an imv_t object. * Private data of an imc_t object.
*/ */
struct private_tnc_imc_t { struct private_tnc_imc_t {
@@ -61,6 +62,13 @@ struct private_tnc_imc_t {
* Number of supported message types * Number of supported message types
*/ */
TNC_UInt32 type_count; TNC_UInt32 type_count;
/**
* mutex to lock the imc_t object
*/
mutex_t *mutex;
}; };
METHOD(imc_t, set_id, void, METHOD(imc_t, set_id, void,
@@ -90,6 +98,9 @@ METHOD(imc_t, set_message_types, void,
int len = sizeof(buf); int len = sizeof(buf);
int written; int written;
/* lock the imc instance */
this->mutex->lock(this->mutex);
/* Free an existing MessageType list */ /* Free an existing MessageType list */
free(this->supported_types); free(this->supported_types);
this->supported_types = NULL; this->supported_types = NULL;
@@ -117,6 +128,9 @@ METHOD(imc_t, set_message_types, void,
*pos = '\0'; *pos = '\0';
DBG2(DBG_TNC, "IMC %u supports %u message types:%s", DBG2(DBG_TNC, "IMC %u supports %u message types:%s",
this->id, type_count, buf); this->id, type_count, buf);
/* lock the imc instance */
this->mutex->unlock(this->mutex);
} }
METHOD(imc_t, type_supported, bool, METHOD(imc_t, type_supported, bool,
@@ -150,6 +164,7 @@ METHOD(imc_t, destroy, void,
private_tnc_imc_t *this) private_tnc_imc_t *this)
{ {
dlclose(this->handle); dlclose(this->handle);
this->mutex->destroy(this->mutex);
free(this->supported_types); free(this->supported_types);
free(this->name); free(this->name);
free(this->path); free(this->path);
@@ -174,6 +189,7 @@ imc_t* tnc_imc_create(char *name, char *path)
}, },
.name = name, .name = name,
.path = path, .path = path,
.mutex = mutex_create(MUTEX_TYPE_DEFAULT),
); );
this->handle = dlopen(path, RTLD_LAZY); this->handle = dlopen(path, RTLD_LAZY);