diff --git a/CHANGELOG b/CHANGELOG
index 3b61e52b2fc560abeb0b10a453b29e9398029ff2..0cff6857c2ccde368a33153584f8d580042e0ab1 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -44,6 +44,7 @@ v 8.11.0 (unreleased)
   - Reduce number of queries made for merge_requests/:id/diffs
   - Sensible state specific default sort order for issues and merge requests !5453 (tomb0y)
   - Fix RequestProfiler::Middleware error when code is reloaded in development
+  - Catch what warden might throw when profiling requests to re-throw it
 
 v 8.10.3 (unreleased)
   - Fix importer for GitHub Pull Requests when a branch was removed
diff --git a/lib/gitlab/request_profiler/middleware.rb b/lib/gitlab/request_profiler/middleware.rb
index 0c54f2dd71f807355868d7f609812ff48c4cadfb..4e787dc0656c6888f9798a8a1ef17faabf321909 100644
--- a/lib/gitlab/request_profiler/middleware.rb
+++ b/lib/gitlab/request_profiler/middleware.rb
@@ -29,7 +29,9 @@ module Gitlab
       def call_with_profiling(env)
         ret = nil
         result = RubyProf::Profile.profile do
-          ret = @app.call(env)
+          ret = catch(:warden) do
+            @app.call(env)
+          end
         end
 
         printer   = RubyProf::CallStackPrinter.new(result)
@@ -41,7 +43,11 @@ module Gitlab
           printer.print(file)
         end
 
-        ret
+        if ret.is_a?(Array)
+          ret
+        else
+          throw(:warden, ret)
+        end
       end
     end
   end