Ejemplo n.º 1
0
func (log *Logger) Log9p(f *g9p.Fcall) {
	if f == nil {
		http.Handle(log.path, nil)
		stats.mu.Lock()
		for e := stats.conns.Front(); e != nil; e = e.Next() {
			if e.Value == log {
				stats.conns.Remove(e)
				break
			}
		}
		stats.mu.Unlock()
		return
	}
	log.mu.Lock()
	if f.IsTmsg() {
		log.npend++
		log.nreqs++
		if log.npend > log.maxpend {
			log.maxpend = log.npend
		}
		log.tmsgsize += int64(f.Size)
	} else {
		log.rmsgsize += int64(f.Size)
		// TODO: cater for flushes
		log.npend--
	}
	if log.maxHist != 0 && f.Type != 0 {
		nf := new(g9p.Fcall)
		*nf = *f
		if log.flags&Packets != 0 {
			nf.Pkt = make([]byte, len(f.Pkt))
			copy(nf.Pkt, f.Pkt)
		} else {
			nf.Pkt = nil
		}
		log.history.PushFront(nf)
		if log.history.Len() > log.maxHist && log.maxHist != -1 {
			log.history.Remove(log.history.Back())
		}
	}

	log.mu.Unlock()
}