From e21d603356fc4242143a045e436d42689343e7fa Mon Sep 17 00:00:00 2001 From: epriestley Date: Sat, 14 Oct 2017 07:14:31 -0700 Subject: [PATCH] (stable) Disconnect rate limits in the PhabricatorStartup shutdown handler This makes counts more accurate, particularly for connection limits. --- support/startup/PhabricatorStartup.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/support/startup/PhabricatorStartup.php b/support/startup/PhabricatorStartup.php index 41164fbd84..1911a46b8a 100644 --- a/support/startup/PhabricatorStartup.php +++ b/support/startup/PhabricatorStartup.php @@ -150,6 +150,11 @@ final class PhabricatorStartup { * @task hook */ public static function didShutdown() { + // Disconnect any active rate limits before we shut down. If we don't do + // this, requests which exit early will lock a slot in any active + // connection limits, and won't count for rate limits. + self::disconnectRateLimits(array()); + $event = error_get_last(); if (!$event) { @@ -730,6 +735,10 @@ final class PhabricatorStartup { public static function disconnectRateLimits(array $request_state) { $limits = self::$limits; + // Remove all limits before disconnecting them so this works properly if + // it runs twice. (We run this automatically as a shutdown handler.) + self::$limits = array(); + foreach ($limits as $limit) { $limit->didDisconnect($request_state); }