using System; using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; namespace Foodsoft.Alpm { internal class SafeFilePackageHandle : SafePackageHandle { [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] [PrePrepareMethod] internal SafeFilePackageHandle(IntPtr ptr, SafeAlpmHandle parentHandle) : base(parentHandle) { var success = false; RuntimeHelpers.PrepareConstrainedRegions(); try { } finally { parentHandle.DangerousAddRef(ref success); if (success) handle = ptr; } if (!success) throw new ObjectDisposedException(GetType().FullName); } [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] [PrePrepareMethod] protected override bool ReleaseHandle() { var err = alpm.alpm_pkg_free(handle); SafeAlpmHandle.DangerousRelease(); return err == 0; } } }