public void Push(FramePacket frame) { stats.CountFrameLoad(); FramePacket trashBuf = null; lock (this) { frames.AddFront(frame); if (frames.Count >= maxQueueCount) { stats.CountFrameSkip(); trashBuf = frames.RemoveBack(); } } if (trashBuf != null && poolBuffer) { bufferPool.Push(trashBuf); } }
public void Push(FramePacket frame) { stats.CountFrameLoad(); FramePacket trashBuf = null; lock (this) { frames.AddFront(frame); if (frames.Count >= maxQueueCount) { stats.CountFrameSkip(); trashBuf = frames.RemoveBack(); } } // lock内でPushしないのは、thisとbufferPoolの両方のlockを同時にとらないようにする配慮。 if (trashBuf != null) { bufferPool.Push(trashBuf); } }