Skip to content

Commit 2db404d

Browse files
author
dsygocki
committed
fix: Fix the issue with Elympics.dll becoming locked
1 parent 2216381 commit 2db404d

3 files changed

Lines changed: 23 additions & 8 deletions

File tree

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,5 @@ crashlytics-build.properties
141141
Assets/GIT_IGNORE/
142142
Assets/GIT_IGNORE.meta
143143

144-
144+
# Related to the internal test for Elympics.dll weaving lock problem
145+
Runtime/WeaverLockingProblemTest.*

Editor/Weaving/ElympicsRpcComponent.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
using System;
12
using System.Collections.Generic;
23
using System.Linq;
34
using Elympics.Weaver;
45
using Elympics.Weaver.Extensions;
6+
using Elympics.Weaving;
57
using Mono.Cecil;
68
using Mono.Cecil.Cil;
79

@@ -14,8 +16,10 @@ public class ElympicsRpcComponent : WeaverComponent
1416

1517
private ElympicsWeaverAssembly _assembly;
1618

17-
public override void VisitModule(ModuleDefinition moduleDefinition) =>
19+
protected override void StartVisiting(ModuleDefinition moduleDefinition)
20+
{
1821
_assembly = new ElympicsWeaverAssembly(moduleDefinition.Assembly);
22+
}
1923

2024
internal void ValidateRpcMethodDefinition(MethodDefinition methodDefinition)
2125
{
@@ -153,5 +157,14 @@ public override void VisitMethod(MethodDefinition methodDefinition)
153157
// Calling standard method
154158
rpcILProcessor.InsertBefore(firstInstruction, originalMethodBodyBranch);
155159
}
160+
161+
protected override void FinishVisiting(ModuleDefinition moduleDefinition)
162+
{
163+
var processedAttribute = new CustomAttribute(moduleDefinition
164+
.ImportReference(typeof(ProcessedByElympicsAttribute).GetConstructor(Array.Empty<Type>())));
165+
moduleDefinition.Assembly.CustomAttributes.Add(processedAttribute);
166+
167+
_assembly = null;
168+
}
156169
}
157170
}

Editor/Weaving/Weaver/WeaverExtension.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using Elympics.Weaving;
32
using Mono.Cecil;
43
using UnityEngine;
54

@@ -66,13 +65,15 @@ public bool EffectsDefintion(DefinitionType type)
6665
/// Invoked whenever we start editing a module. Used to populate our
6766
/// helper functions
6867
/// </summary>
69-
public virtual void OnBeforeModuleEdited(ModuleDefinition moduleDefinition, Log log)
68+
public void OnBeforeModuleEdited(ModuleDefinition moduleDefinition, Log log)
7069
{
7170
if (m_RequiredScriptingSymbols.isActive)
7271
{
7372
m_Log = log;
7473
m_ActiveModule = moduleDefinition;
7574
Log("Visiting module");
75+
76+
StartVisiting(moduleDefinition);
7677
}
7778
else
7879
{
@@ -83,21 +84,21 @@ public virtual void OnBeforeModuleEdited(ModuleDefinition moduleDefinition, Log
8384
/// <summary>
8485
/// Invoked when we have finished editing a module
8586
/// </summary>
86-
public virtual void OnModuleEditComplete(ModuleDefinition moduleDefinition)
87+
public void OnModuleEditComplete(ModuleDefinition moduleDefinition)
8788
{
88-
var processedAttribute = new CustomAttribute(moduleDefinition
89-
.ImportReference(typeof(ProcessedByElympicsAttribute).GetConstructor(Array.Empty<Type>())));
90-
moduleDefinition.Assembly.CustomAttributes.Add(processedAttribute);
89+
FinishVisiting(moduleDefinition);
9190

9291
m_ActiveModule = null;
9392
Log("Module visitation complete");
9493
}
9594

95+
protected virtual void StartVisiting(ModuleDefinition moduleDefinition) { }
9696
public virtual void VisitModule(ModuleDefinition moduleDefinition) { }
9797
public virtual void VisitType(TypeDefinition typeDefinition) { }
9898
public virtual void VisitMethod(MethodDefinition methodDefinition) { }
9999
public virtual void VisitField(FieldDefinition fieldDefinition) { }
100100
public virtual void VisitProperty(PropertyDefinition propertyDefinition) { }
101+
protected virtual void FinishVisiting(ModuleDefinition moduleDefinition) { }
101102

102103
#region -= Logging =-
103104
/// <summary>

0 commit comments

Comments
 (0)