示例#1
0
            /// <summary>Enqueue a new reference to the given message into the internal message queue.</summary>
            void InnerEnqueueMesg(LogMessage lm)
            {
                if (lm == null)
                {
                    return;
                }

                if (!mesgQueueIsFull && mesgQueueCount < mesgQueueSize)
                {
                    if (useLocalMesgSeqNumGenerator)
                        lm.SeqNum = localMesgSeqNumGenerator.Increment();

                    // enqueue the new message
                    mesgQueue.Enqueue(lm.AddReference());
                    mesgQueueCount = mesgQueue.Count;

                    if (NullMessageSeqNum != lm.SeqNum)
                        queuedMesgSeqNumRange.lastSeqNumIn = lm.SeqNum;

                    lm = null;
                }
                else
                {
                    if (!mesgQueueIsFull)
                    {
                        mesgQueueIsFull = true;
                        mesgQueueFullStartTime.SetToNow();
                        mesgQueueDroppedMesgCount = 0;
                    }

                    mesgQueueDroppedMesgCount++;
                    mesgQueueTotalDroppedMesgCount++;
                }
            }