From bc61a31abe558cb92662af87aae5fab245032b4e Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan.bosch@open-xchange.com>
Date: Sun, 20 Oct 2024 01:44:05 +0200
Subject: [PATCH] lib-sieve: sieve-storage - Add event parameter to
 sieve_storage_sequence_create()

---
 src/lib-sieve/sieve-script.c          | 2 +-
 src/lib-sieve/sieve-storage-private.h | 1 +
 src/lib-sieve/sieve-storage.c         | 7 ++++++-
 src/lib-sieve/sieve-storage.h         | 1 +
 4 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/lib-sieve/sieve-script.c b/src/lib-sieve/sieve-script.c
index 445f848e1..dbbe303f7 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 7dd007355..b84ba3481 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 05fe830ef..598d14576 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 0a38ea5d5..0fe2a3c1b 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);
-- 
GitLab