about summary refs log tree commit homepage
path: root/t/oob_gc_path.ru
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-04-29 15:48:35 -0700
committerEric Wong <normalperson@yhbt.net>2011-04-29 16:01:14 -0700
commitfaeb3223636c39ea8df4017dc9a9d39ac649b26d (patch)
treefce6b3ee71fc84e41ed3227ff2136b167b2d59b6 /t/oob_gc_path.ru
parentce4995a4daf1e4da7034dc87fd218a283c405410 (diff)
downloadunicorn-faeb3223636c39ea8df4017dc9a9d39ac649b26d.tar.gz
This was broken since v3.3.1[1] since nginx relies on a closed
socket (and not Content-Length/Transfer-Encoding) to detect
a response completion.  We have to close the client socket
before invoking GC to ensure the client sees the response
in a timely manner.

[1] - commit b72a86f66c722d56a6d77ed1d2779ace6ad103ed
Diffstat (limited to 't/oob_gc_path.ru')
-rw-r--r--t/oob_gc_path.ru21
1 files changed, 21 insertions, 0 deletions
diff --git a/t/oob_gc_path.ru b/t/oob_gc_path.ru
new file mode 100644
index 0000000..e936a85
--- /dev/null
+++ b/t/oob_gc_path.ru
@@ -0,0 +1,21 @@
+#\-E none
+require 'unicorn/oob_gc'
+use Rack::ContentLength
+use Rack::ContentType, "text/plain"
+use Unicorn::OobGC, 5, /BAD/
+$gc_started = false
+
+# Mock GC.start
+def GC.start
+  ObjectSpace.each_object(BasicSocket) do |x|
+    next if Unicorn::HttpServer::LISTENERS.include?(x)
+    x.closed? or abort "not closed #{x}"
+  end
+  $gc_started = true
+end
+run lambda { |env|
+  if "/gc_reset" == env["PATH_INFO"] && "POST" == env["REQUEST_METHOD"]
+    $gc_started = false
+  end
+  [ 200, {}, [ "#$gc_started\n" ] ]
+}