• Joe Tsai's avatar
    fmt: fix usage of sync.Pool · e82d152e
    Joe Tsai authored
    The current usage of sync.Pool is leaky because it stores an arbitrary
    sized buffer into the pool. However, sync.Pool assumes that all items in the
    pool are interchangeable from a memory cost perspective. Due to the unbounded
    size of a buffer that may be added, it is possible for the pool to eventually
    pin arbitrarily large amounts of memory in a live-lock situation.
    
    As a simple fix, we just set a maximum size that we permit back into the pool.
    
    We do not need to fix the use of a sync.Pool in scan.go since the free method
    has always enforced a maximum capacity since the first commit of the scan logic.
    
    Fixes #27740
    Updates #23199
    
    Change-Id: I875278f7dba42625405df36df3e9b028252ce5e3
    Reviewed-on: https://go-review.googlesource.com/136116Reviewed-by: 's avatarBryan C. Mills <bcmills@google.com>
    Run-TryBot: Bryan C. Mills <bcmills@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    e82d152e
print.go 29.6 KB