From: Art Cancro Date: Wed, 16 Aug 2023 03:45:24 +0000 (-0900) Subject: serv_expire: move to new msglists call X-Git-Tag: v989~73 X-Git-Url: https://code.citadel.org/?a=commitdiff_plain;h=3dcbc4a9af6d5b66589b47357e1f8061fb6faeb5;p=citadel.git serv_expire: move to new msglists call --- diff --git a/citadel/server/modules/expire/serv_expire.c b/citadel/server/modules/expire/serv_expire.c index 096360aa4..028599ebc 100644 --- a/citadel/server/modules/expire/serv_expire.c +++ b/citadel/server/modules/expire/serv_expire.c @@ -31,6 +31,7 @@ #include "../../database.h" #include "../../msgbase.h" #include "../../user_ops.h" +#include "../../room_ops.h" #include "../../control.h" #include "../../threads.h" #include "../../context.h" @@ -93,7 +94,6 @@ void GatherPurgeMessages(struct ctdlroom *qrbuf, void *data) { time_t xtime, now; struct CtdlMessage *msg = NULL; int a; - struct cdbdata *cdbfr; long *msglist = NULL; int num_msgs = 0; FILE *purgelist; @@ -103,6 +103,7 @@ void GatherPurgeMessages(struct ctdlroom *qrbuf, void *data) { time(&now); GetExpirePolicy(&epbuf, qrbuf); + syslog(LOG_DEBUG, "expire: scanning room %ld (%s), policy %d", qrbuf->QRnumber, qrbuf->QRname, epbuf.expire_mode); // If the room is set to never expire messages ... do nothing if (epbuf.expire_mode == EXPIRE_NEXTLEVEL) return; @@ -112,23 +113,19 @@ void GatherPurgeMessages(struct ctdlroom *qrbuf, void *data) { if (!strcasecmp(qrbuf->QRname, SYSCONFIGROOM)) return; // Ok, we got this far ... now let's see what's in the room. - cdbfr = cdb_fetch(CDB_MSGLISTS, &qrbuf->QRnumber, sizeof(long)); - - if (cdbfr != NULL) { - msglist = malloc(cdbfr->len); - memcpy(msglist, cdbfr->ptr, cdbfr->len); - num_msgs = cdbfr->len / sizeof(long); - cdb_free(cdbfr); - } + TRACE; + num_msgs = CtdlFetchMsgList(qrbuf->QRnumber, &msglist); + TRACE; // Nothing to do if there aren't any messages - if (num_msgs == 0) { + if (num_msgs <= 0) { if (msglist != NULL) free(msglist); return; } // If the room is set to expire by count, do that. if (epbuf.expire_mode == EXPIRE_NUMMSGS) { + TRACE; if (num_msgs > epbuf.expire_value) { for (a=0; a<(num_msgs - epbuf.expire_value); ++a) { fprintf(purgelist, "m=%ld\n", msglist[a]); @@ -139,9 +136,9 @@ void GatherPurgeMessages(struct ctdlroom *qrbuf, void *data) { // If the room is set to expire by age... if (epbuf.expire_mode == EXPIRE_AGE) { + TRACE; for (a=0; acm_fields[eTimestamp]); @@ -158,7 +155,9 @@ void GatherPurgeMessages(struct ctdlroom *qrbuf, void *data) { } } - if (msglist != NULL) free(msglist); + if (msglist != NULL) { + free(msglist); + } } diff --git a/citadel/server/room_ops.c b/citadel/server/room_ops.c index b8f8113d7..344c6b97d 100644 --- a/citadel/server/room_ops.c +++ b/citadel/server/room_ops.c @@ -609,7 +609,7 @@ int CtdlFetchMsgList(long roomnum, long **msgs) { int num_msgs = 0; struct cdbdata *cdbfr; - cdbfr = cdb_fetch(CDB_MSGLISTS, &CC->room.QRnumber, sizeof(long)); + cdbfr = cdb_fetch(CDB_MSGLISTS, &roomnum, sizeof(long)); if (cdbfr == NULL) { syslog(LOG_ERR, "room_ops: no msglist for room %ld", roomnum); *msgs = NULL;