@@ -644,14 +644,14 @@ ngx_http_lua_socket_tcp_connect(lua_State *L)
644
644
}
645
645
646
646
if (u -> conn_waiting ) {
647
- /* resolved and already connecting */
647
+ dd ( " resolved and already connecting" );
648
648
return lua_yield (L , 0 );
649
649
}
650
650
651
651
n = lua_gettop (L ) - saved_top ;
652
652
if (n ) {
653
- /* errors occurred during resolving or connecting
654
- * or already connected */
653
+ dd ( " errors occurred during resolving or connecting"
654
+ " or already connected" );
655
655
return n ;
656
656
}
657
657
@@ -784,19 +784,7 @@ ngx_http_lua_socket_resolve_handler(ngx_resolver_ctx_t *ctx)
784
784
}
785
785
#endif
786
786
787
- if (ur -> naddrs == 0 ) {
788
- ngx_resolve_name_done (ctx );
789
- u -> ft_type |= NGX_HTTP_LUA_SOCKET_FT_RESOLVER ;
790
-
791
- lua_pushnil (L );
792
- lua_pushliteral (L , "name cannot be resolved to a address" );
793
-
794
- if (waiting ) {
795
- ngx_http_run_posted_requests (c );
796
- }
797
-
798
- return ;
799
- }
787
+ ngx_http_lua_assert (ur -> naddrs > 0 );
800
788
801
789
if (ur -> naddrs == 1 ) {
802
790
i = 0 ;
@@ -864,9 +852,8 @@ ngx_http_lua_socket_resolve_handler(ngx_resolver_ctx_t *ctx)
864
852
ur -> host .len = len ;
865
853
ur -> naddrs = 1 ;
866
854
867
- ur -> ctx = NULL ;
868
-
869
855
ngx_resolve_name_done (ctx );
856
+ ur -> ctx = NULL ;
870
857
871
858
u -> conn_waiting = 0 ;
872
859
u -> write_co_ctx = NULL ;
@@ -884,13 +871,17 @@ ngx_http_lua_socket_resolve_handler(ngx_resolver_ctx_t *ctx)
884
871
885
872
nomem :
886
873
887
- ngx_resolve_name_done (ctx );
888
- u -> ft_type |= NGX_HTTP_LUA_SOCKET_FT_NOMEM ;
874
+ if (ur -> ctx ) {
875
+ ngx_resolve_name_done (ctx );
876
+ ur -> ctx = NULL ;
877
+ }
889
878
890
- lua_pushnil (L );
891
- lua_pushliteral (L , "no memory" );
879
+ u -> write_prepare_retvals = ngx_http_lua_socket_conn_error_retval_handler ;
880
+ ngx_http_lua_socket_handle_conn_error (r , u ,
881
+ NGX_HTTP_LUA_SOCKET_FT_NOMEM );
892
882
893
883
if (waiting ) {
884
+ dd ("run posted requests" );
894
885
ngx_http_run_posted_requests (c );
895
886
}
896
887
}
@@ -2518,10 +2509,13 @@ ngx_http_lua_socket_handle_conn_error(ngx_http_request_t *r,
2518
2509
u -> read_event_handler = ngx_http_lua_socket_dummy_handler ;
2519
2510
u -> write_event_handler = ngx_http_lua_socket_dummy_handler ;
2520
2511
2512
+ dd ("connection waiting: %d" , (int ) u -> conn_waiting );
2513
+
2514
+ coctx = u -> write_co_ctx ;
2515
+
2521
2516
if (u -> conn_waiting ) {
2522
2517
u -> conn_waiting = 0 ;
2523
2518
2524
- coctx = u -> write_co_ctx ;
2525
2519
coctx -> cleanup = NULL ;
2526
2520
u -> write_co_ctx = NULL ;
2527
2521
@@ -2537,6 +2531,9 @@ ngx_http_lua_socket_handle_conn_error(ngx_http_request_t *r,
2537
2531
"lua tcp socket waking up the current request" );
2538
2532
2539
2533
r -> write_event_handler (r );
2534
+
2535
+ } else {
2536
+ u -> write_prepare_retvals (r , u , coctx -> co );
2540
2537
}
2541
2538
}
2542
2539
0 commit comments