X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2FBanNode.c;h=7bec1c02c41e2a0df63e4c168f6decc1cf237b25;hb=55831bf424312a6908ca07a904f288fba0919a9a;hp=c1601f15d827bf9147fdbdff52fd0cac89479b33;hpb=0f1dc61921eef1db8e404a5a82372e2d1cd55daa;p=NeonServV5.git diff --git a/src/BanNode.c b/src/BanNode.c index c1601f1..7bec1c0 100644 --- a/src/BanNode.c +++ b/src/BanNode.c @@ -1,3 +1,19 @@ +/* BanNode.c - NeonServ v5.3 + * 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); }