0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-10-03 14:18:53 +02:00

channel: cache duplicate calls to is_banned() and is_quieted()

This commit is contained in:
William Pitcock 2015-12-13 08:13:52 -06:00
parent c42a66be2e
commit 2f9687c48c
2 changed files with 27 additions and 4 deletions

View file

@ -76,6 +76,11 @@ struct Channel
unsigned long bants; unsigned long bants;
time_t channelts; time_t channelts;
char *chname; char *chname;
struct Client *last_checked_client;
time_t last_checked_ts;
unsigned int last_checked_type;
int last_checked_result;
}; };
struct membership struct membership

View file

@ -671,8 +671,17 @@ int
is_banned(struct Channel *chptr, struct Client *who, struct membership *msptr, is_banned(struct Channel *chptr, struct Client *who, struct membership *msptr,
const char *s, const char *s2, const char **forward) const char *s, const char *s2, const char **forward)
{ {
return is_banned_list(chptr, &chptr->banlist, who, msptr, s, s2, if (chptr->last_checked_client != NULL &&
forward); who == chptr->last_checked_client &&
chptr->last_checked_type == CHFL_BAN &&
rb_current_time() - chptr->last_checked_ts < 5)
return chptr->last_checked_result;
chptr->last_checked_type = CHFL_BAN;
chptr->last_checked_result = is_banned_list(chptr, &chptr->banlist, who, msptr, s, s2, forward);
chptr->last_checked_ts = rb_current_time();
return chptr->last_checked_result;
} }
/* is_quieted() /* is_quieted()
@ -686,8 +695,17 @@ int
is_quieted(struct Channel *chptr, struct Client *who, struct membership *msptr, is_quieted(struct Channel *chptr, struct Client *who, struct membership *msptr,
const char *s, const char *s2) const char *s, const char *s2)
{ {
return is_banned_list(chptr, &chptr->quietlist, who, msptr, s, s2, if (chptr->last_checked_client != NULL &&
NULL); who == chptr->last_checked_client &&
chptr->last_checked_type == CHFL_QUIET &&
rb_current_time() - chptr->last_checked_ts < 5)
return chptr->last_checked_result;
chptr->last_checked_type = CHFL_QUIET;
chptr->last_checked_result = is_banned_list(chptr, &chptr->quietlist, who, msptr, s, s2, NULL);
chptr->last_checked_ts = rb_current_time();
return chptr->last_checked_result;
} }
/* can_join() /* can_join()