Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        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.
                //
            }
        }