summaryrefslogtreecommitdiff
path: root/lib/gitlab/middleware/release_env.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/middleware/release_env.rb')
-rw-r--r--lib/gitlab/middleware/release_env.rb14
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/gitlab/middleware/release_env.rb b/lib/gitlab/middleware/release_env.rb
new file mode 100644
index 00000000000..f8d0a135965
--- /dev/null
+++ b/lib/gitlab/middleware/release_env.rb
@@ -0,0 +1,14 @@
+module Gitlab
+ module Middleware
+ # Some of middleware would hold env for no good reason even after the
+ # request had already been processed, and we could not garbage collect
+ # them due to this. Put this middleware as the first middleware so that
+ # it would clear the env after the request is done, allowing GC gets a
+ # chance to release memory for the last request.
+ ReleaseEnv = Struct.new(:app) do
+ def call(env)
+ app.call(env).tap { env.clear }
+ end
+ end
+ end
+end