X-Git-Url: http://git.pk910.de/?p=NeonServV5.git;a=blobdiff_plain;f=src%2FBanNode.c;h=df3e38e9485049add86c3af208ee244790c7f704;hp=c1601f15d827bf9147fdbdff52fd0cac89479b33;hb=HEAD;hpb=0f1dc61921eef1db8e404a5a82372e2d1cd55daa diff --git a/src/BanNode.c b/src/BanNode.c index c1601f1..df3e38e 100644 --- a/src/BanNode.c +++ b/src/BanNode.c @@ -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 . + */ #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); }