general: Fix issue causing log threads to hang indefinitely when print() panics
authorEphex2 <alexandrejoseph.tessier@gmail.com>
Wed, 26 Jan 2022 22:44:20 +0000 (17:44 -0500)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 27 Jan 2022 09:38:50 +0000 (10:38 +0100)
commit22055176d23417ac9039f14efdc668ed6cc6a7b9
treed3f0af4ab9a30805872aab9075d30bd32932e24e
parent7a080b624e73fe3a10cfab9ee4fa8e9b7e7c31ad
general: Fix issue causing log threads to hang indefinitely when print() panics

The function printIfNotPrinted() defined for DistinctLogger unlocked the mutex within
the logger only after the print() function ran. If print panics, the mutex would stay
locked and future attempts to read or write from the logger mutex would cause the goroutine
to hang indefinitely.

Deferred the unlocking of the mutex to prevent this. Also, put l.m[key] before the print()
call since this will prevent another bug where the same warning potentially gets logged
multiple times if the print() call panics.

Fixes #9380
helpers/general.go
helpers/general_test.go