]> code.citadel.org Git - citadel.git/blobdiff - citadel/server/modules/fulltext/serv_fulltext.c
Wrapping indexer transactions inside a critical section seems to make it not deadlock
[citadel.git] / citadel / server / modules / fulltext / serv_fulltext.c
index 994e856bbe716a4f42c959f81f07cbbe351d10de..caa5f17e76a00a7e1a1dc1942a0ff846e02ffd2f 100644 (file)
@@ -102,6 +102,7 @@ void ft_index_message(long msgnum, int op) {
        );
 
        if (array_len(tokens_in_this_message) > 0) {
+               begin_critical_section(S_INDEXER);
                cdb_begin_transaction();
                for (i=0; i<array_len(tokens_in_this_message); ++i) {
 
@@ -122,7 +123,6 @@ void ft_index_message(long msgnum, int op) {
                                memcpy(newbucket, cdb_bucket.ptr, cdb_bucket.len);
                                for (j=0; j<nmsgs; ++j) {
                                        if ((newbucket[j] == msgnum) || (newbucket[j] == 0)) {
-                                               fprintf(stderr, "removing %ld\n", newbucket[j]);
                                                memcpy(&newbucket[j], &newbucket[j+1], ((nmsgs-j)*sizeof(long)));
                                                --j;
                                                --nmsgs;
@@ -137,6 +137,7 @@ void ft_index_message(long msgnum, int op) {
                        if (server_shutting_down) break;
                }
                cdb_end_transaction();
+               end_critical_section(S_INDEXER);
                CtdlSetConfigLong("MMfulltext", msgnum);
        }
        array_free(tokens_in_this_message);