[squid-dev] [PATCH] Make PID file check/creation atomic
Amos Jeffries
squid3 at treenet.co.nz
Mon May 15 12:04:33 UTC 2017
On 07/05/17 09:59, Eduard Bagdasaryan wrote:
> This patch makes PID file check/creation atomic to avoid associated
> race conditions.
I do not see any use of atomic's in this patch. Please use std::atomic
locks to ensure actually atomic operations on the file locks. Squid does
have some child processes operating as threads so custom implementations
that don't use real atomic's will fail under some circumstances.
>
> Authors: Alex Rousskov, Eduard Bagdasaryan
>
> After this change, if N Squid instances are concurrently started shortly
> after time TS, then exactly one Squid instance (X) will run (and have
> the corresponding PID file). If another Squid instance has already been
> running (with the corresponding PID file) at TS, then X will be that
> "old" Squid instance. If no Squid instances were running at TS, then X
> will be one of those new N Squids started after TS.
>
> Lack of atomic PID file operations caused unexpected Squid behavior:
> * Mismatch between started Squid instance and stored PID file.
> * Unexpected crashes due to failed allocation of shared resources,
> such as listening TCP ports or shared memory segments.
>
> A new File class guarantees atomic PID file operations using locks. We
> tried to generalize/reuse Ssl::Lock from the certificate generation
What Ssl::Lock class?
Amos
More information about the squid-dev
mailing list