/// <summary> /// Tries to open a shared memory map. /// </summary> /// <param name="globalMemoryRegion"></param> /// <param name="memoryRegionId"></param> /// <param name="sharedMemoryMapView"></param> /// <returns></returns> public static bool TryOpenExisting( this GlobalMemoryRegion globalMemoryRegion, MlosInternal.MemoryRegionId memoryRegionId, out SharedMemoryMapView sharedMemoryMapView) { MlosInternal.RegisteredMemoryRegionConfig.CodegenKey registeredMemoryLookupKey = default; registeredMemoryLookupKey.MemoryRegionId = memoryRegionId; // Locate shared memory region config. // SharedConfig <MlosProxyInternal.RegisteredMemoryRegionConfig> registeredMemoryRegionSharedConfig = SharedConfigManager.Lookup(globalMemoryRegion.SharedConfigDictionary, registeredMemoryLookupKey); if (!registeredMemoryRegionSharedConfig.HasSharedConfig) { sharedMemoryMapView = null; return(false); } // Config exists, create a shared config memory region. // MlosProxyInternal.RegisteredMemoryRegionConfig registeredMemoryRegionConfig = registeredMemoryRegionSharedConfig.Config; sharedMemoryMapView = SharedMemoryMapView.OpenExisting( registeredMemoryRegionConfig.MemoryMapName.Value, registeredMemoryRegionConfig.MemoryRegionSize); return(true); }
public void VerifySharedMemoryMapUnlink() { // Create a new shared memory maps. // var newSharedChannelMemoryMap = SharedMemoryMapView.CreateNew(SharedMemoryMapName, SharedMemorySize); newSharedChannelMemoryMap.CleanupOnClose = true; newSharedChannelMemoryMap.Dispose(); try { // Verify we can open already created shared memory. // using var openedSharedChannelMemoryMap = SharedMemoryMapView.OpenExisting(SharedMemoryMapName, SharedMemorySize); openedSharedChannelMemoryMap.CleanupOnClose = true; Assert.False(true, "Shared memory map should be deleted"); } catch (FileNotFoundException) { // We are expecting failure. // } }