added a (passing) test for aborting the receive() invocation on the ngx.req.socket() object.

This commit is contained in:
agentzh (Yichun Zhang) 2012-09-24 17:08:25 -07:00
Родитель 1d74cad199
Коммит 94e623f6fe
1 изменённых файлов: 87 добавлений и 0 удалений

Просмотреть файл

@ -862,3 +862,90 @@ after
--- no_error_log --- no_error_log
[error] [error]
=== TEST 11: exit in user thread (entry thread is still pending on reqsock:receive)
--- config
location /lua {
content_by_lua '
function f()
ngx.say("hello in thread")
ngx.sleep(0.1)
ngx.exit(0)
end
ngx.say("before")
ngx.thread.create(f)
ngx.say("after")
local sock = ngx.req.socket()
sock:settimeout(12000)
local data, err = sock:receive(1024)
if not data then
ngx.say("failed to receive: ", err)
return
end
ngx.say("end")
';
}
--- request
POST /lua
--- stap2 eval: $::StapScript
--- stap eval
<<'_EOC_' . $::GCScript;
global timers
F(ngx_http_free_request) {
println("free request")
}
M(timer-add) {
if ($arg2 == 12000 || $arg2 == 100) {
timers[$arg1] = $arg2
printf("add timer %d\n", $arg2)
}
}
M(timer-del) {
tm = timers[$arg1]
if (tm == 12000 || tm == 100) {
printf("delete timer %d\n", tm)
delete timers[$arg1]
}
}
M(timer-expire) {
tm = timers[$arg1]
if (tm == 12000 || tm == 100) {
printf("expire timer %d\n", timers[$arg1])
delete timers[$arg1]
}
}
F(ngx_http_lua_tcp_socket_cleanup) {
println("lua tcp socket cleanup")
}
_EOC_
--- stap_out
create 2 in 1
create user thread 2 in 1
add timer 100
add timer 12000
expire timer 100
lua tcp socket cleanup
delete timer 12000
delete thread 2
delete thread 1
free request
--- response_body
before
hello in thread
after
--- no_error_log
[error]