diff --git a/src/lib-sieve/sieve-script.c b/src/lib-sieve/sieve-script.c index 445f848e13266c43cd1175eb8c0c3390cefeaa40..dbbe303f7131d8a673420d733f8ad8cbe5e1b42c 100644 --- a/src/lib-sieve/sieve-script.c +++ b/src/lib-sieve/sieve-script.c @@ -959,7 +959,7 @@ int sieve_script_sequence_create(struct sieve_instance *svinst, *sseq_r = NULL; sieve_error_args_init(&error_code_r, NULL); - if (sieve_storage_sequence_create(svinst, location, + if (sieve_storage_sequence_create(svinst, svinst->event, location, &storage_seq, error_code_r) < 0) return -1; diff --git a/src/lib-sieve/sieve-storage-private.h b/src/lib-sieve/sieve-storage-private.h index 7dd007355c4faa440dfa1e6c5e4736170653f2a6..b84ba348123c59701701ace2b7079feca6168c89 100644 --- a/src/lib-sieve/sieve-storage-private.h +++ b/src/lib-sieve/sieve-storage-private.h @@ -168,6 +168,7 @@ struct sieve_storage_save_context { struct sieve_storage_sequence { struct sieve_instance *svinst; + struct event *event_parent; char *location; bool done:1; diff --git a/src/lib-sieve/sieve-storage.c b/src/lib-sieve/sieve-storage.c index 05fe830efa4288643f739f5ba3b88e4196c11bb8..598d145760fece93f9a3a637757380d0ae294090 100644 --- a/src/lib-sieve/sieve-storage.c +++ b/src/lib-sieve/sieve-storage.c @@ -1650,6 +1650,7 @@ sieve_storage_get_last_error(struct sieve_storage *storage, */ int sieve_storage_sequence_create(struct sieve_instance *svinst, + struct event *event_parent, const char *location, struct sieve_storage_sequence **sseq_r, enum sieve_error *error_code_r) @@ -1663,6 +1664,9 @@ int sieve_storage_sequence_create(struct sieve_instance *svinst, sseq->svinst = svinst; sseq->location = i_strdup(location); + sseq->event_parent = event_parent; + event_ref(event_parent); + *sseq_r = sseq; return 0; } @@ -1680,7 +1684,7 @@ int sieve_storage_sequence_next(struct sieve_storage_sequence *sseq, return 0; sseq->done = TRUE; - if (sieve_storage_create(svinst, svinst->event, sseq->location, 0, + if (sieve_storage_create(svinst, sseq->event_parent, sseq->location, 0, storage_r, error_code_r) < 0) return -1; return 1; @@ -1694,6 +1698,7 @@ void sieve_storage_sequence_free(struct sieve_storage_sequence **_sseq) return; *_sseq = NULL; + event_unref(&sseq->event_parent); i_free(sseq->location); i_free(sseq); } diff --git a/src/lib-sieve/sieve-storage.h b/src/lib-sieve/sieve-storage.h index 0a38ea5d57c9de57f94d4d72d5274b18bae20c25..0fe2a3c1bb05d1cf6ed44c76dc47389d5086e8d3 100644 --- a/src/lib-sieve/sieve-storage.h +++ b/src/lib-sieve/sieve-storage.h @@ -188,6 +188,7 @@ void sieve_storage_set_modified(struct sieve_storage *storage, struct sieve_storage_sequence; int sieve_storage_sequence_create(struct sieve_instance *svinst, + struct event *event_parent, const char *location, struct sieve_storage_sequence **sseq_r, enum sieve_error *error_code_r);