aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon
diff options
context:
space:
mode:
authorAndreas Steffen <andreas.steffen@strongswan.org>2011-05-09 07:55:59 +0200
committerAndreas Steffen <andreas.steffen@strongswan.org>2011-05-09 16:46:08 +0200
commitbb6b2fbb8139b6aa5b7e1cdac76fae10708b20dc (patch)
tree08d53a08f6331e070eb1ad3f1a0e0798344bcf86 /src/libcharon
parent375ac27609187ed7b78e187bdc27858277b354ce (diff)
downloadstrongswan-bb6b2fbb8139b6aa5b7e1cdac76fae10708b20dc.tar.bz2
strongswan-bb6b2fbb8139b6aa5b7e1cdac76fae10708b20dc.tar.xz
lock the set_message_types() method for imvs
Diffstat (limited to 'src/libcharon')
-rw-r--r--src/libcharon/plugins/tnc_imv/tnc_imv.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/libcharon/plugins/tnc_imv/tnc_imv.c b/src/libcharon/plugins/tnc_imv/tnc_imv.c
index f6459ad9d..fe628ee7e 100644
--- a/src/libcharon/plugins/tnc_imv/tnc_imv.c
+++ b/src/libcharon/plugins/tnc_imv/tnc_imv.c
@@ -19,6 +19,7 @@
#include <debug.h>
#include <library.h>
+#include <threading/mutex.h>
typedef struct private_tnc_imv_t private_tnc_imv_t;
@@ -61,6 +62,11 @@ struct private_tnc_imv_t {
* Number of supported message types
*/
TNC_UInt32 type_count;
+
+ /**
+ * mutex to lock the imv_t object
+ */
+ mutex_t *mutex;
};
METHOD(imv_t, set_id, void,
@@ -90,6 +96,9 @@ METHOD(imv_t, set_message_types, void,
int len = sizeof(buf);
int written;
+ /* lock the imv_t instance */
+ this->mutex->lock(this->mutex);
+
/* Free an existing MessageType list */
free(this->supported_types);
this->supported_types = NULL;
@@ -118,6 +127,9 @@ METHOD(imv_t, set_message_types, void,
*pos = '\0';
DBG2(DBG_TNC, "IMV %u supports %u message types:%s",
this->id, type_count, buf);
+
+ /* lock the imv_t instance */
+ this->mutex->unlock(this->mutex);
}
METHOD(imv_t, type_supported, bool,
@@ -151,6 +163,7 @@ METHOD(imv_t, destroy, void,
private_tnc_imv_t *this)
{
dlclose(this->handle);
+ this->mutex->destroy(this->mutex);
free(this->supported_types);
free(this->name);
free(this->path);
@@ -175,6 +188,7 @@ imv_t* tnc_imv_create(char *name, char *path)
},
.name = name,
.path = path,
+ .mutex = mutex_create(MUTEX_TYPE_DEFAULT),
);
this->handle = dlopen(path, RTLD_LAZY);