summaryrefslogtreecommitdiff
blob: fea0f5bbb5a6581bb1a49cbeba0c2c0057854b8f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
--- l7-filter-userspace-0.11/l7-conntrack.cpp.orig	2009-02-26 21:40:28.000000000 +0000
+++ l7-filter-userspace-0.11/l7-conntrack.cpp	2010-07-23 13:03:23.000000000 +0100
@@ -195,11 +195,13 @@
 {
   nfct_conntrack_free(ct);
   nfct_close(cth);
+  pthread_mutex_destroy(&map_mutex);
 }
 
 l7_conntrack::l7_conntrack(void* l7_classifier_in) 
 {
   l7_classifier = (l7_classify *)l7_classifier_in;
+  pthread_mutex_init(&map_mutex, NULL);
   
   // Now open a handler that is subscribed to all possible events
   cth = nfct_open(CONNTRACK, NFCT_ALL_CT_GROUPS);
@@ -211,19 +213,27 @@
 
 l7_connection *l7_conntrack::get_l7_connection(const string key) 
 {
-  return l7_connections[key];
+  l7_connection *conn;
+  pthread_mutex_lock(&map_mutex);
+  conn = l7_connections[key];
+  pthread_mutex_unlock(&map_mutex);
+  return conn;
 }
 
 void l7_conntrack::add_l7_connection(l7_connection* connection, 
 					const string key) 
 {
+  pthread_mutex_lock(&map_mutex);
   l7_connections[key] = connection;
+  pthread_mutex_unlock(&map_mutex);
 }
 
 void l7_conntrack::remove_l7_connection(const string key) 
 {
+  pthread_mutex_lock(&map_mutex);
   delete l7_connections[key];
   l7_connections.erase(l7_connections.find(key));
+  pthread_mutex_unlock(&map_mutex);
 }
 
 void l7_conntrack::start() 
--- l7-filter-userspace-0.11/l7-conntrack.h.orig	2010-07-23 13:04:49.000000000 +0100
+++ l7-filter-userspace-0.11/l7-conntrack.h	2010-07-23 13:05:56.000000000 +0100
@@ -52,6 +52,7 @@
   l7_map l7_connections;
   struct nfct_conntrack *ct;
   struct nfct_handle *cth; // the callback
+  pthread_mutex_t map_mutex;
 
  public:
   l7_conntrack(void * foo);