Skip to content

Commit

Permalink
avoiding locking issues with save events
Browse files Browse the repository at this point in the history
  • Loading branch information
yohsii committed Mar 18, 2022
1 parent d4138e3 commit 141102f
Showing 1 changed file with 23 additions and 12 deletions.
35 changes: 23 additions & 12 deletions core/Services/ContentService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1320,6 +1320,27 @@ public void UpdatePathRelatedMeta(string oldPath, string newPath,bool save=true)

}
public async Task<SaveResult> SaveContent<T>(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<T>(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<SaveResult> DoSaveContent<T>(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();
Expand Down Expand Up @@ -1385,13 +1406,7 @@ public async Task<SaveResult> SaveContent<T>(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;
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 141102f

Please sign in to comment.