private void RemoveStreamFromProviders(EventProviderDataStream streamToRemove)
 {
     foreach (WeakReference reference in s_providers)
     {
         EventProviderBase target = reference.Target as EventProviderBase;
         if (target != null)
         {
             if (target.m_OutputStreams.m_MasterStream == streamToRemove)
             {
                 target.m_OutputStreams = target.m_OutputStreams.m_Next;
             }
             else
             {
                 EventProviderDataStream outputStreams = target.m_OutputStreams;
                 while (true)
                 {
                     EventProviderDataStream next = outputStreams.m_Next;
                     if (next == null)
                     {
                         break;
                     }
                     if (next.m_MasterStream == streamToRemove)
                     {
                         outputStreams.m_Next = next.m_Next;
                         break;
                     }
                     outputStreams = next;
                 }
             }
         }
     }
 }
 public static EventProviderDataStream Register(Action <EventWrittenEventArgs> callBack)
 {
     lock (EventProviderStreamsLock)
     {
         EventProviderDataStream masterStream = new EventProviderDataStream(callBack, s_Streams, null, null);
         s_Streams = masterStream;
         foreach (WeakReference reference in s_providers)
         {
             EventProviderBase target = reference.Target as EventProviderBase;
             if (target != null)
             {
                 target.m_OutputStreams = new EventProviderDataStream(callBack, target.m_OutputStreams, new bool[target.EventIdLimit], masterStream);
             }
         }
         return(masterStream);
     }
 }
 internal static void AddProvider(EventProviderBase newProvider)
 {
     lock (EventProviderStreamsLock)
     {
         if (s_providers == null)
         {
             s_providers = new List<WeakReference>(2);
         }
         int count = -1;
         if ((s_providers.Count % 0x40) == 0x3f)
         {
             for (int i = 0; i < s_providers.Count; i++)
             {
                 WeakReference reference = s_providers[i];
                 if (!reference.IsAlive)
                 {
                     count = i;
                     reference.Target = newProvider;
                     break;
                 }
             }
         }
         if (count < 0)
         {
             count = s_providers.Count;
             s_providers.Add(new WeakReference(newProvider));
         }
         newProvider.m_id = count;
         for (EventProviderDataStream stream = s_Streams; stream != null; stream = stream.m_Next)
         {
             newProvider.m_OutputStreams = new EventProviderDataStream(stream.m_Callback, newProvider.m_OutputStreams, new bool[newProvider.EventIdLimit], stream);
         }
         EventHandler<EventProviderCreatedEventArgs> handler = s_EventProviderCreated;
         if (handler != null)
         {
             EventProviderCreatedEventArgs e = new EventProviderCreatedEventArgs {
                 Provider = newProvider
             };
             handler(null, e);
         }
     }
 }
 internal static void AddProvider(EventProviderBase newProvider)
 {
     lock (EventProviderStreamsLock)
     {
         if (s_providers == null)
         {
             s_providers = new List <WeakReference>(2);
         }
         int count = -1;
         if ((s_providers.Count % 0x40) == 0x3f)
         {
             for (int i = 0; i < s_providers.Count; i++)
             {
                 WeakReference reference = s_providers[i];
                 if (!reference.IsAlive)
                 {
                     count            = i;
                     reference.Target = newProvider;
                     break;
                 }
             }
         }
         if (count < 0)
         {
             count = s_providers.Count;
             s_providers.Add(new WeakReference(newProvider));
         }
         newProvider.m_id = count;
         for (EventProviderDataStream stream = s_Streams; stream != null; stream = stream.m_Next)
         {
             newProvider.m_OutputStreams = new EventProviderDataStream(stream.m_Callback, newProvider.m_OutputStreams, new bool[newProvider.EventIdLimit], stream);
         }
         EventHandler <EventProviderCreatedEventArgs> handler = s_EventProviderCreated;
         if (handler != null)
         {
             EventProviderCreatedEventArgs e = new EventProviderCreatedEventArgs {
                 Provider = newProvider
             };
             handler(null, e);
         }
     }
 }
        public void SendCommand(Guid providerGuid, bool enable, EventLevel level, EventKeywords matchAnyKeyword, ControllerCommand command, IDictionary <string, string> commandArguments)
        {
            List <EventProviderBase> list = new List <EventProviderBase>();

            lock (EventProviderStreamsLock)
            {
                foreach (WeakReference reference in s_providers)
                {
                    EventProviderBase target = reference.Target as EventProviderBase;
                    if ((target != null) && ((target.Guid == providerGuid) || (providerGuid == Guid.Empty)))
                    {
                        list.Add(target);
                    }
                }
            }
            foreach (EventProviderBase base3 in list)
            {
                base3.SendCommand(this, enable, level, matchAnyKeyword, command, commandArguments);
            }
        }
예제 #6
0
 public OverideEventProvider(EventProviderBase eventProvider)
 {
     this.m_eventProviderBase = eventProvider;
 }
예제 #7
0
 public OverideEventProvider(EventProviderBase eventProvider) 
 { 
     this.m_eventProviderBase = eventProvider;
 } 
예제 #8
0
 internal EventWrittenEventArgs(EventProviderBase providerBase)
 { 
     m_providerBase = providerBase; 
 }
예제 #9
0
        /// <summary>
        /// This routine adds this to the global list of providers, it also assigns the ID to the 
        /// provider (which is simply the oridinal in the global list)
        /// </summary> 
        /// <param name="newProvider"></param> 
        internal static void AddProvider(EventProviderBase newProvider)
        { 
            lock (EventProviderStreamsLock)
            {
                if (s_providers == null)
                    s_providers = new List<WeakReference>(2); 

                // Periodically search the list for existing entries to reuse, this avoids 
                // unbounded memory use if we keep recycling providers (an unlikely thing). 
                int newIndex = -1;
                if (s_providers.Count % 64 == 63) 
                {
                    for (int i = 0; i < s_providers.Count; i++)
                    {
                        WeakReference weakRef = s_providers[i]; 
                        if (!weakRef.IsAlive)
                        { 
                            newIndex = i; 
                            weakRef.Target = newProvider;
                            break; 
                        }
                    }
                }
                if (newIndex < 0) 
                {
                    newIndex = s_providers.Count; 
                    s_providers.Add(new WeakReference(newProvider)); 
                }
                newProvider.m_id = newIndex; 

                // Add every existing outputStream to the new Provider
                for (EventProviderDataStream outputStream = s_Streams; outputStream != null; outputStream = outputStream.m_Next)
                    newProvider.m_OutputStreams = new EventProviderDataStream(outputStream.m_Callback, newProvider.m_OutputStreams, new bool[newProvider.EventIdLimit], outputStream); 

                // Put in a local to avoid ---- with null check. 
                EventHandler<EventProviderCreatedEventArgs> callback = s_EventProviderCreated; 
                if (callback != null)
                    callback(null, new EventProviderCreatedEventArgs { Provider = newProvider }); 
            }
        }
예제 #10
0
 /// <summary>
 /// A small integer (suitable for indexing in an array) identifying this provider.  It is unique 
 /// per-appdomain.  This allows the callback registered in 'Register' to efficiently attach addition
 /// information to a provider.
 /// </summary>
 public static int ProviderId(EventProviderBase provider) { return provider.m_id; } 
 public static int ProviderId(EventProviderBase provider)
 {
     return(provider.m_id);
 }
예제 #12
0
 internal EventWrittenEventArgs(EventProviderBase providerBase)
 {
     this.m_providerBase = providerBase;
 }