Merge branch 'development'
[NeonServV5.git] / src / BanNode.c
index c1601f15d827bf9147fdbdff52fd0cac89479b33..df3e38e9485049add86c3af208ee244790c7f704 100644 (file)
@@ -1,3 +1,19 @@
+/* BanNode.c - NeonServ v5.6
+ * Copyright (C) 2011-2012  Philipp Kreil (pk910)
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License 
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. 
+ */
 
 #include "BanNode.h"
 #include "ChanNode.h"
@@ -7,22 +23,28 @@ struct BanNode* addChannelBan(struct ChanNode *chan, char *mask) {
     struct BanNode *ban = malloc(sizeof(*ban));
     ban->chan = chan;
     ban->mask = strdup(mask);
+    SYNCHRONIZE(cache_sync);
     ban->next = chan->bans;
     chan->bans = ban;
+    DESYNCHRONIZE(cache_sync);
     return ban;
 }
 
 struct BanNode* getMatchingChannelBan(struct ChanNode *chan, char *mask) {
+    SYNCHRONIZE(cache_sync);
     struct BanNode *cban;
     for(cban = chan->bans; cban; cban = cban->next) {
         if(!match(cban->mask, mask)) {
+            DESYNCHRONIZE(cache_sync);
             return cban;
         }
     }
+    DESYNCHRONIZE(cache_sync);
     return NULL;
 }
 
 void removeChannelBanMask(struct ChanNode *chan, char *mask) {
+    SYNCHRONIZE(cache_sync);
     struct BanNode *cban, *last = NULL;
     for(cban = chan->bans; cban; cban = cban->next) {
         if(!strcmp(cban->mask, mask)) {
@@ -36,9 +58,11 @@ void removeChannelBanMask(struct ChanNode *chan, char *mask) {
         } else 
             last = cban;
     }
+    DESYNCHRONIZE(cache_sync);
 }
 
 void removeChannelBan(struct BanNode *ban) {
+    SYNCHRONIZE(cache_sync);
     struct BanNode *cban, *last = NULL;
     struct ChanNode *chan = ban->chan;
     for(cban = chan->bans; cban; cban = cban->next) {
@@ -53,9 +77,11 @@ void removeChannelBan(struct BanNode *ban) {
         } else 
             last = cban;
     }
+    DESYNCHRONIZE(cache_sync);
 }
 
 void removeChannelBans(struct ChanNode *chan) {
+    SYNCHRONIZE(cache_sync);
     struct BanNode *ban, *next;
     for(ban = chan->bans; ban; ban = next) {
         next = ban->next;
@@ -63,4 +89,5 @@ void removeChannelBans(struct ChanNode *chan) {
         free(ban);
     }
     chan->bans = NULL;
+    DESYNCHRONIZE(cache_sync);
 }