Skip to content

Potential issue with Counter internal slice management #1296

Description

@bernata

What did you do?

I created a PR to demonstrate the problem:
#1295

To summarize, there are 4 counters:

	c1 := (&Counter{}).With("a", "1", "b", "2", "c", "3", "d", "4")
	c2 := c1.With("e", "5").(*Counter)
	c3 := c2.With("f", "6", "g", "7").(*Counter)
	c4 := c2.With("h", "8").(*Counter)

The counters c3 and c4 share the same backing memory for the counter lvs slice. As a result, c4 will overwrite the contents of c3 lvs slice. So in the example above, at the end of the execution, c3 lvs internal slice has values: a 1 b 2 c 3 d 4 e 5 h 8 g 7

What did you expect?

The expectation I have is c3 lvs internal slice has values: a 1 b 2 c 3 d 4 e 5 f 6 g 7
I assumed it behaved a bit like context.WithValue which I think would have similar behavior in keeping the parent-child contexts free from overwrite.

What happened instead?

The c3 lvs internal slice has values: a 1 b 2 c 3 d 4 e 5 h 8 g 7 because c4 overwrote part of the c3 slice.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions