public void ApplyModificationIfNeeded(IRomByte romByte)
 {
     romByte.Lock.EnterUpgradeableReadLock();
     try
     {
         CompareToExisting(romByte);
         if (changed)
         {
             ApplyModification(romByte);
         }
     }
     finally
     {
         romByte.Lock.ExitUpgradeableReadLock();
     }
 }
 // precondition: rombyte (minimum of) read lock already acquired
 private void ApplyModification(IRomByte romByte)
 {
     romByte.Lock.EnterWriteLock();
     try
     {
         romByte.TypeFlag   = FlagType;
         romByte.DataBank   = (byte)DataBank;
         romByte.DirectPage = 0xFFFF & DirectPage;
         romByte.XFlag      = XFlagSet;
         romByte.MFlag      = MFlagSet;
     }
     finally
     {
         romByte.Lock.ExitWriteLock();
     }
 }