commit ae5ebfb9f0dc1b628a5eebbb39615b3483fe05db from: Alexander Barton date: Sun Dec 25 16:44:20 2011 UTC New functions Lists_Expire() and Class_Expire() GLINE and KLINE lists are cleared automatically now, not when they are checked. So "STATS g" and "STATS k" no longer show expired entries :-) commit - e9e6224aaeac6aab825caa12172bc207a00a86f9 commit + ae5ebfb9f0dc1b628a5eebbb39615b3483fe05db blob - dd10ac81021fb0e80fd8336a67b4ecddf329ad89 blob + 1a4d4c0b6d1179ae22776d8f57df80c2754d71d8 --- src/ngircd/class.c +++ src/ngircd/class.c @@ -83,4 +83,11 @@ Class_GetList(const int Class) return My_Classes[Class]; } +GLOBAL void +Class_Expire(void) +{ + Lists_Expire(&My_Classes[CLASS_GLINE], "G-Line"); + Lists_Expire(&My_Classes[CLASS_KLINE], "K-Line"); +} + /* -eof- */ blob - b93c3b68cb78bf0cc3141acee7dae52014a9d9a5 blob + 3507836f857f0c7ce261e440f80ab0ed9396f623 --- src/ngircd/class.h +++ src/ngircd/class.h @@ -33,6 +33,8 @@ GLOBAL bool Class_IsMember PARAMS((const int Class, CL GLOBAL struct list_head Class_GetList PARAMS((const int Class)); +GLOBAL void Class_Expire PARAMS((void)); + #endif /* __class_h__ */ /* -eof- */ blob - aa754eb482ae5c38f224adee20c9ac129751f19e blob + 4d5c223c0161f1713448b38a5a576024d84febd1 --- src/ngircd/conn.c +++ src/ngircd/conn.c @@ -65,6 +65,7 @@ #include "ngircd.h" #include "array.h" #include "client.h" +#include "class.h" #include "conf.h" #include "conn-ssl.h" #include "conn-zip.h" @@ -741,6 +742,9 @@ Conn_Handler(void) /* Check configured servers and established links */ Check_Servers(); Check_Connections(); + + /* Expire outdated class/list items */ + Class_Expire(); /* Look for non-empty read buffers ... */ for (i = 0; i < Pool_Size; i++) { blob - 8e120bfeb16a059bf17d043dd440bd69c587cfe7 blob + 63c16b0da1ed268af0a7f42bd6e49fe22a13da1a --- src/ngircd/lists.c +++ src/ngircd/lists.c @@ -316,22 +316,16 @@ bool Lists_Check( struct list_head *h, CLIENT *Client) { struct list_elem *e, *last, *next; + time_t now; assert(h != NULL); e = h->first; last = NULL; + now = time(NULL); while (e) { next = e->next; - if (e->valid_until > 1 && e->valid_until < time(NULL)) { - /* Entry is expired, delete it */ - LogDebug("Deleted \"%s\" from list (expired).", - e->mask); - Lists_Unlink(h, last, e); - e = next; - continue; - } if (Match(e->mask, Client_Mask(Client))) { if (e->valid_until == 1) { /* Entry is valid only once, delete it */ @@ -346,6 +340,44 @@ Lists_Check( struct list_head *h, CLIENT *Client) } return false; +} + +/** + * Check list and purge expired entries. + * + * @param h List head. + */ +GLOBAL void +Lists_Expire(struct list_head *h, const char *ListName) +{ + struct list_elem *e, *last, *next; + time_t now; + + assert(h != NULL); + + e = h->first; + last = NULL; + now = time(NULL); + + while (e) { + next = e->next; + if (e->valid_until > 1 && e->valid_until < now) { + /* Entry is expired, delete it */ + if (e->reason) + Log(LOG_INFO, + "Deleted \"%s\" (\"%s\") from %s list (expired).", + e->mask, e->reason, ListName); + else + Log(LOG_INFO, + "Deleted \"%s\" from %s list (expired).", + e->mask, ListName); + Lists_Unlink(h, last, e); + e = next; + continue; + } + last = e; + e = next; + } } /* -eof- */ blob - 316b13454068c18f856170e4938190f9bab3a357 blob + f9a4c91cf5158b9c52fe7a4f5dbf1df9080fc86a --- src/ngircd/lists.h +++ src/ngircd/lists.h @@ -47,6 +47,8 @@ GLOBAL const char *Lists_GetMask PARAMS((const struct GLOBAL const char *Lists_GetReason PARAMS((const struct list_elem *e)); GLOBAL time_t Lists_GetValidity PARAMS((const struct list_elem *e)); +GLOBAL void Lists_Expire PARAMS((struct list_head *h, const char *ListName)); + #endif /* -eof- */