projects
/
NeonServV5.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
added experimental multi thread support
[NeonServV5.git]
/
src
/
ChanUser.c
diff --git
a/src/ChanUser.c
b/src/ChanUser.c
index 800f1fc22a860581d1e19418c4a0bf296d56d56c..9ac06912ef0683039cd2bb1accc4cf529e09365f 100644
(file)
--- a/
src/ChanUser.c
+++ b/
src/ChanUser.c
@@
-1,5
+1,5
@@
-/* ChanUser.c - NeonServ v5.
1
- * Copyright (C) 2011 Philipp Kreil (pk910)
+/* ChanUser.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
*
* 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
@@
-31,6
+31,9
@@
struct ChanUser* addChanUser(struct ChanNode *chan, struct UserNode *user) {
chanuser->chan = chan;
chanuser->changeTime = 0;
chanuser->chan = chan;
chanuser->changeTime = 0;
+ chanuser->spamnode = NULL;
+
+ SYNCHRONIZE(cache_sync);
chanuser->next_user = chan->user;
chan->user = chanuser;
chanuser->next_user = chan->user;
chan->user = chanuser;
@@
-39,6
+42,8
@@
struct ChanUser* addChanUser(struct ChanNode *chan, struct UserNode *user) {
chanuser->next_chan = user->channel;
user->channel = chanuser;
chanuser->next_chan = user->channel;
user->channel = chanuser;
+ DESYNCHRONIZE(cache_sync);
+
return chanuser;
}
return chanuser;
}
@@
-54,9
+59,12
@@
struct ChanUser* addInvisibleChanUser(struct ChanNode *chan, struct UserNode *us
chanuser->chan = chan;
chanuser->changeTime = 0;
chanuser->chan = chan;
chanuser->changeTime = 0;
+ chanuser->spamnode = NULL;
+ SYNCHRONIZE(cache_sync);
chanuser->next_user = chan->user;
chan->user = chanuser;
chanuser->next_user = chan->user;
chan->user = chanuser;
+ DESYNCHRONIZE(cache_sync);
chan->usercount++;
return chanuser;
chan->usercount++;
return chanuser;
@@
-94,7
+102,8
@@
struct ChanUser* getUserChannels(struct UserNode *user, struct ChanUser *last) {
return last->next_chan;
}
return last->next_chan;
}
-void delChanUser(struct ChanUser *chanuser, int freeChanUser) {
+void delChanUser(struct ChanUser *chanuser, int do_freeChanUser) {
+ SYNCHRONIZE(cache_sync);
struct ChanUser *cchanuser, *last;
//remove it from the user's channel-list
if(!(chanuser->flags & CHANUSERFLAG_INVISIBLE)) {
struct ChanUser *cchanuser, *last;
//remove it from the user's channel-list
if(!(chanuser->flags & CHANUSERFLAG_INVISIBLE)) {
@@
-125,15
+134,17
@@
void delChanUser(struct ChanUser *chanuser, int freeChanUser) {
last = cchanuser;
}
last = cchanuser;
}
- if(
freeChanUser)
- free(chanuser);
- else {
+ if(
do_freeChanUser) {
+ free
ChanUser
(chanuser);
+
}
else {
chanuser->next_chan = NULL;
chanuser->next_user = NULL;
}
chanuser->next_chan = NULL;
chanuser->next_user = NULL;
}
+ DESYNCHRONIZE(cache_sync);
}
}
-void removeChanUserFromLists(struct ChanUser *chanuser, int remove_from_userlist, int remove_from_channellist, int freeChanUser) {
+void removeChanUserFromLists(struct ChanUser *chanuser, int remove_from_userlist, int remove_from_channellist, int do_freeChanUser) {
+ SYNCHRONIZE(cache_sync);
struct ChanUser *cchanuser, *last;
if(remove_from_userlist) {
//remove it from the channel's user-list
struct ChanUser *cchanuser, *last;
if(remove_from_userlist) {
//remove it from the channel's user-list
@@
-167,7
+178,15
@@
void removeChanUserFromLists(struct ChanUser *chanuser, int remove_from_userlist
chanuser->next_chan = NULL;
}
chanuser->next_chan = NULL;
}
- if(freeChanUser)
- free(chanuser);
+ if(do_freeChanUser) {
+ freeChanUser(chanuser);
+ }
+ DESYNCHRONIZE(cache_sync);
+}
+
+void freeChanUser(struct ChanUser *chanuser) {
+ if(chanuser->spamnode)
+ free(chanuser->spamnode);
+ free(chanuser);
}
}