aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Memory/Tracking/VirtualRegion.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Memory/Tracking/VirtualRegion.cs')
-rw-r--r--Ryujinx.Memory/Tracking/VirtualRegion.cs19
1 files changed, 19 insertions, 0 deletions
diff --git a/Ryujinx.Memory/Tracking/VirtualRegion.cs b/Ryujinx.Memory/Tracking/VirtualRegion.cs
index 40f56351..57a0344a 100644
--- a/Ryujinx.Memory/Tracking/VirtualRegion.cs
+++ b/Ryujinx.Memory/Tracking/VirtualRegion.cs
@@ -31,6 +31,25 @@ namespace Ryujinx.Memory.Tracking
UpdateProtection();
}
+ public override void SignalPrecise(ulong address, ulong size, bool write)
+ {
+ IList<RegionHandle> handles = Handles;
+
+ bool allPrecise = true;
+
+ for (int i = 0; i < handles.Count; i++)
+ {
+ allPrecise &= handles[i].SignalPrecise(address, size, write, ref handles);
+ }
+
+ // Only update protection if a regular signal handler was called.
+ // This allows precise actions to skip reprotection costs if they want (they can still do it manually).
+ if (!allPrecise)
+ {
+ UpdateProtection();
+ }
+ }
+
/// <summary>
/// Signal that this region has been mapped or unmapped.
/// </summary>