Esempio n. 1
0
 public void Dispose()
 {
     _semaphore.Do(s =>
     {
         s.Release(1);
         s.Dispose();
     });
     ProfilerHasResults.Do(e => e.Dispose());
     ResultsHaveBeenReceived.Do(e => e.Dispose());
     StreamAccessorResults.Do(r => r.Dispose());
     _mmfResults.Do(r => r.Dispose());
 }
Esempio n. 2
0
            internal ManagedMemoryBlock(string @namespace, string key, int bufferSize, int bufferId, IEnumerable <string> servicePrincpal)
            {
                Namespace = @namespace;
                Key       = key;

                EventWaitHandleSecurity  open        = null;
                MemoryMappedFileSecurity transparent = null;

                var service         = servicePrincpal.FirstOrDefault();
                var currentIdentity = WindowsIdentity.GetCurrent();

                if (service != null && currentIdentity != null)
                {
                    open = new EventWaitHandleSecurity();
                    open.AddAccessRule(new EventWaitHandleAccessRule(currentIdentity.Name, EventWaitHandleRights.FullControl, AccessControlType.Allow));

                    // The event handles need more than just EventWaitHandleRights.Modify | EventWaitHandleRights.Synchronize to work
                    open.AddAccessRule(new EventWaitHandleAccessRule(service, EventWaitHandleRights.FullControl, AccessControlType.Allow));

                    transparent = new MemoryMappedFileSecurity();
                    transparent.AddAccessRule(new AccessRule <MemoryMappedFileRights>(currentIdentity.Name, MemoryMappedFileRights.FullControl, AccessControlType.Allow));
                    transparent.AddAccessRule(new AccessRule <MemoryMappedFileRights>(service, MemoryMappedFileRights.ReadWrite, AccessControlType.Allow));
                }

                bool createdNew;

                ProfilerHasResults = new EventWaitHandle(
                    false,
                    EventResetMode.ManualReset,
                    MakeName(@"\OpenCover_Profiler_Communication_SendResults_Event_", bufferId),
                    out createdNew,
                    open);

                ResultsHaveBeenReceived = new EventWaitHandle(
                    false,
                    EventResetMode.ManualReset,
                    MakeName(@"\OpenCover_Profiler_Communication_ReceiveResults_Event_", bufferId),
                    out createdNew,
                    open);

                _mmfResults = MemoryMappedFile.CreateNew(
                    MakeName(@"\OpenCover_Profiler_Results_MemoryMapFile_", bufferId),
                    bufferSize,
                    MemoryMappedFileAccess.ReadWrite,
                    MemoryMappedFileOptions.None,
                    transparent,
                    HandleInheritability.Inheritable);

                StreamAccessorResults = _mmfResults.CreateViewStream(0, bufferSize, MemoryMappedFileAccess.ReadWrite);
                StreamAccessorResults.Write(BitConverter.GetBytes(0), 0, 4);
                BufferSize = bufferSize;
            }
Esempio n. 3
0
 protected virtual void Dispose(bool disposing)
 {
     if (!_disposed && disposing)
     {
         _disposed = true;
         _semaphore
         .Try(s => s.Release(1))
         .Do(s => s.Dispose());
         ProfilerHasResults.Do(e => e.Dispose());
         ResultsHaveBeenReceived.Do(e => e.Dispose());
         StreamAccessorResults.Do(r => r.Dispose());
         _mmfResults.Do(r => r.Dispose());
     }
 }
Esempio n. 4
0
            internal ManagedMemoryBlock(string @namespace, string key, int bufferSize, int bufferId)
            {
                Namespace = @namespace;
                Key       = key;

                ProfilerHasResults = new EventWaitHandle(false, EventResetMode.ManualReset,
                                                         MakeName(@"\OpenCover_Profiler_Communication_SendResults_Event_", bufferId));

                ResultsHaveBeenReceived = new EventWaitHandle(false, EventResetMode.ManualReset,
                                                              MakeName(@"\OpenCover_Profiler_Communication_ReceiveResults_Event_", bufferId));

                _mmfResults = MemoryMappedFile.CreateNew(MakeName(@"\OpenCover_Profiler_Results_MemoryMapFile_", bufferId), bufferSize);

                StreamAccessorResults = _mmfResults.CreateViewStream(0, bufferSize, MemoryMappedFileAccess.ReadWrite);
                StreamAccessorResults.Write(BitConverter.GetBytes(0), 0, 4);
                BufferSize = bufferSize;
            }
Esempio n. 5
0
 public void Dispose()
 {
     Debug.WriteLine("*** disposing memory block ***");
     StreamAccessorResults.Dispose();
     _mmfResults.Dispose();
 }
Esempio n. 6
0
 public void Dispose()
 {
     StreamAccessorResults.Dispose();
     _mmfResults.Dispose();
 }