diff --git a/common/protocol/http/sniff.go b/common/protocol/http/sniff.go index e85a0792..40968294 100644 --- a/common/protocol/http/sniff.go +++ b/common/protocol/http/sniff.go @@ -63,7 +63,7 @@ func SniffHTTP(b []byte, c context.Context) (*SniffHeader, error) { ShouldSniffAttr := true // If content.Attributes have information, that means it comes from HTTP inbound PlainHTTP mode. // It will set attributes, so skip it. - if content == nil || len(content.Attributes) != 0 { + if content == nil || content.AttributeLen() != 0 { ShouldSniffAttr = false } if err := beginWithHTTPMethod(b); err != nil { diff --git a/common/session/session.go b/common/session/session.go index deb01f8c..4573b216 100644 --- a/common/session/session.go +++ b/common/session/session.go @@ -128,8 +128,24 @@ func (c *Content) SetAttribute(name string, value string) { // Attribute retrieves additional string attributes from content. func (c *Content) Attribute(name string) string { + c.mu.Lock() + c.isLocked = true + defer func() { + c.isLocked = false + c.mu.Unlock() + }() if c.Attributes == nil { return "" } return c.Attributes[name] } + +func (c *Content) AttributeLen() int { + c.mu.Lock() + c.isLocked = true + defer func() { + c.isLocked = false + c.mu.Unlock() + }() + return len(c.Attributes) +} \ No newline at end of file