From 141102fe02002c063ae754602a6c396ac382e74b Mon Sep 17 00:00:00 2001 From: "Simon.Yohannes" Date: Fri, 18 Mar 2022 14:32:24 +0000 Subject: [PATCH] avoiding locking issues with save events --- core/Services/ContentService.cs | 35 ++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/core/Services/ContentService.cs b/core/Services/ContentService.cs index 08f08ba3..07e3f4f2 100644 --- a/core/Services/ContentService.cs +++ b/core/Services/ContentService.cs @@ -1320,6 +1320,27 @@ public void UpdatePathRelatedMeta(string oldPath, string newPath,bool save=true) } public async Task SaveContent(T mod, bool makeRevision = true, string userName = null, bool handleNodeNameExists = true, int nodeNameExistsCounter = 0, bool triggerEvents = true, bool triggerIndexEvents = true, bool shouldIndex = true, bool alwaysUpdatePath = true, bool queueIfIndexerBusy = false) where T : BaseModel + { + if (triggerEvents) + { + var beforeArgs = new BeforeIndexingEventArgs { Node = mod }; + OnBeforeSave(this, beforeArgs); + if (beforeArgs.Cancel) + throw new SaveCancelledException("Saving was cancelled by a custom event handler"); + } + + var returnValue = await DoSaveContent(mod, makeRevision, userName, handleNodeNameExists, nodeNameExistsCounter, triggerEvents, triggerIndexEvents, shouldIndex, alwaysUpdatePath, queueIfIndexerBusy); + + if (triggerEvents) + { + var afterArgs = new IndexingEventArgs { Node = mod }; + OnAfterSave(this, afterArgs); + } + + return returnValue; + } + + private async Task DoSaveContent(T mod, bool makeRevision = true, string userName = null, bool handleNodeNameExists = true, int nodeNameExistsCounter = 0, bool triggerEvents = true, bool triggerIndexEvents = true, bool shouldIndex = true, bool alwaysUpdatePath = true, bool queueIfIndexerBusy = false) where T : BaseModel { if (nodeNameExistsCounter == 0) await slock1.WaitAsync(); @@ -1385,13 +1406,7 @@ public async Task SaveContent(T mod, bool makeRevision = true, st //set sort order for new content if (mod.SortOrder == -1) mod.SortOrder = nodesAtPath.Count(); - if (triggerEvents) - { - var beforeArgs = new BeforeIndexingEventArgs { Node = mod }; - OnBeforeSave(this, beforeArgs); - if (beforeArgs.Cancel) - throw new SaveCancelledException("Saving was cancelled by a custom event handler"); - } + //beforesave event was triggered here var revisions = repo.GetPuckRevision().Where(x => x.Id.Equals(mod.Id) && x.Variant.ToLower().Equals(mod.Variant.ToLower())); mod.Updated = DateTime.Now; @@ -1908,11 +1923,7 @@ void _SetPath() if (shouldIndex) AddPublishInstruction(result.ItemsToIndex, save: true); - if (triggerEvents) - { - var afterArgs = new IndexingEventArgs { Node = mod }; - OnAfterSave(this, afterArgs); - } + //aftersave was triggered here if (shouldUpdateDomainMappings) StateHelper.UpdateDomainMappings(true);