public override void ReceiveLog(LogRecord record, string kind) { MemoryBuffer <byte> buf = new MemoryBuffer <byte>(); record.WriteRecordToBuffer(this.LogInfoOptions, buf); MasterBuffer.NonStopWriteWithLock(buf.Memory, true, FastStreamNonStopWriteMode.DiscardExistingData); lock (LockObj) { foreach (var pipe in this.SubscribersList) { pipe.CounterPart._NullCheck(); lock (pipe.CounterPart.StreamWriter.LockObj) { if (pipe.CounterPart.StreamWriter.NonStopWriteWithLock(buf.Memory, false, FastStreamNonStopWriteMode.DiscardExistingData) != 0) { // To avoid deadlock, CompleteWrite() must be called from other thread. // (CompleteWrite() ==> Disconnect ==> Socket Log will recorded ==> ReceiveLog() ==> this function will be called!) TaskUtil.StartSyncTaskAsync(() => pipe.CounterPart.StreamWriter.CompleteWrite(false), false, false)._LaissezFaire(true); } } } } }