From: Art Cancro Date: Wed, 6 Sep 2023 02:55:15 +0000 (-0400) Subject: serv_fulltext: better handling of exit by yield vs complete X-Git-Tag: v993~3 X-Git-Url: https://code.citadel.org/?a=commitdiff_plain;h=d17867012401ad59072ca39d2505f8552a2bc681;p=citadel.git serv_fulltext: better handling of exit by yield vs complete --- diff --git a/citadel/server/modules/fulltext/serv_fulltext.c b/citadel/server/modules/fulltext/serv_fulltext.c index 3a1129f2e..715c168fd 100644 --- a/citadel/server/modules/fulltext/serv_fulltext.c +++ b/citadel/server/modules/fulltext/serv_fulltext.c @@ -188,11 +188,13 @@ void do_fulltext_indexing(void) { int i; static time_t last_progress = 0L; static int is_running = 0; + if (is_running) return; // Concurrency check - only one can run is_running = 1; // Don't do this if the site doesn't have it enabled. if (!CtdlGetConfigInt("c_enable_fulltext")) { + is_running = 0; return; } // If we've switched wordbreaker modules, burn the index and start over. @@ -209,6 +211,7 @@ void do_fulltext_indexing(void) { // Silently return if our fulltext index is up to date with new messages. if ((CtdlGetConfigLong("MMfulltext") >= CtdlGetConfigLong("MMhighest"))) { + is_running = 0; return; // nothing to do! } @@ -226,25 +229,31 @@ void do_fulltext_indexing(void) { long msgnum = 0; long prev_msgnum = 0; time_t started_indexing_at = time(NULL); - for (i=0; i= MAXIMUM_INDEXER_RUN_TIME) { - syslog(LOG_DEBUG, "fulltext: indexer has run for %ld seconds; yielding the thread", time(NULL) - started_indexing_at); - i = array_len(messages_to_be_indexed); // go out of scope to make it stop + yielded = 1; } } array_free(messages_to_be_indexed); - CtdlSetConfigInt("MM_fulltext_wordbreaker", FT_WORDBREAKER_ID); + syslog(LOG_DEBUG, "fulltext: indexer has run for %ld seconds; yielded=%d", time(NULL) - started_indexing_at, yielded); + + // This keeps the indexer from starting up over and over if the highest message in the list was deleted + // before we had a chance to index it. + if (!yielded) { + CtdlSetConfigLong("MMfulltext", highest_msg_to_be_indexed); + } - syslog(LOG_DEBUG, "fulltext: indexing finished"); is_running = 0; return; }