serv_expire: move to new msglists call
authorArt Cancro <ajc@citadel.org>
Wed, 16 Aug 2023 03:45:24 +0000 (18:45 -0900)
committerArt Cancro <ajc@citadel.org>
Wed, 16 Aug 2023 03:45:24 +0000 (18:45 -0900)
citadel/server/modules/expire/serv_expire.c
citadel/server/room_ops.c

index 096360aa4229deaed24add2d4c59c981556e849e..028599ebc7a61d1b72e16698cf4d4fdd6fbcd7fa 100644 (file)
@@ -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; a<num_msgs; ++a) {
                        delnum = msglist[a];
-
                        msg = CtdlFetchMessage(delnum, 0);      // don't need the body
                        if (msg != NULL) {
                                xtime = atol(msg->cm_fields[eTimestamp]);
@@ -158,7 +155,9 @@ void GatherPurgeMessages(struct ctdlroom *qrbuf, void *data) {
                }
        }
 
-       if (msglist != NULL) free(msglist);
+       if (msglist != NULL) {
+               free(msglist);
+       }
 }
 
 
index b8f8113d73777329353f4d69237379088cc5dcc5..344c6b97d47741d17fd7496438b82730bd712d5e 100644 (file)
@@ -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;