55
55
#include "src/core/lib/surface/api_trace.h"
56
56
#include "src/core/lib/surface/server.h"
57
57
58
- typedef struct pending_handshake_manager_node {
59
- grpc_handshake_manager * handshake_mgr ;
60
- struct pending_handshake_manager_node * next ;
61
- } pending_handshake_manager_node ;
62
-
63
58
typedef struct {
64
59
grpc_server * server ;
65
60
grpc_tcp_server * tcp_server ;
@@ -68,7 +63,7 @@ typedef struct {
68
63
bool shutdown ;
69
64
grpc_closure tcp_server_shutdown_complete ;
70
65
grpc_closure * server_destroy_listener_done ;
71
- pending_handshake_manager_node * pending_handshake_mgrs ;
66
+ grpc_handshake_manager * pending_handshake_mgrs ;
72
67
} server_state ;
73
68
74
69
typedef struct {
@@ -78,44 +73,6 @@ typedef struct {
78
73
grpc_handshake_manager * handshake_mgr ;
79
74
} server_connection_state ;
80
75
81
- static void pending_handshake_manager_add_locked (
82
- server_state * state , grpc_handshake_manager * handshake_mgr ) {
83
- pending_handshake_manager_node * node = gpr_malloc (sizeof (* node ));
84
- node -> handshake_mgr = handshake_mgr ;
85
- node -> next = state -> pending_handshake_mgrs ;
86
- state -> pending_handshake_mgrs = node ;
87
- }
88
-
89
- static void pending_handshake_manager_remove_locked (
90
- server_state * state , grpc_handshake_manager * handshake_mgr ) {
91
- pending_handshake_manager_node * * prev_node = & state -> pending_handshake_mgrs ;
92
- for (pending_handshake_manager_node * node = state -> pending_handshake_mgrs ;
93
- node != NULL ; node = node -> next ) {
94
- if (node -> handshake_mgr == handshake_mgr ) {
95
- * prev_node = node -> next ;
96
- gpr_free (node );
97
- break ;
98
- }
99
- prev_node = & node -> next ;
100
- }
101
- }
102
-
103
- static void pending_handshake_manager_shutdown_locked (grpc_exec_ctx * exec_ctx ,
104
- server_state * state ,
105
- grpc_error * why ) {
106
- pending_handshake_manager_node * prev_node = NULL ;
107
- for (pending_handshake_manager_node * node = state -> pending_handshake_mgrs ;
108
- node != NULL ; node = node -> next ) {
109
- grpc_handshake_manager_shutdown (exec_ctx , node -> handshake_mgr ,
110
- GRPC_ERROR_REF (why ));
111
- gpr_free (prev_node );
112
- prev_node = node ;
113
- }
114
- gpr_free (prev_node );
115
- state -> pending_handshake_mgrs = NULL ;
116
- GRPC_ERROR_UNREF (why );
117
- }
118
-
119
76
static void on_handshake_done (grpc_exec_ctx * exec_ctx , void * arg ,
120
77
grpc_error * error ) {
121
78
grpc_handshaker_args * args = arg ;
@@ -153,8 +110,9 @@ static void on_handshake_done(grpc_exec_ctx *exec_ctx, void *arg,
153
110
grpc_channel_args_destroy (exec_ctx , args -> args );
154
111
}
155
112
}
156
- pending_handshake_manager_remove_locked (connection_state -> server_state ,
157
- connection_state -> handshake_mgr );
113
+ grpc_handshake_manager_pending_list_remove (
114
+ & connection_state -> server_state -> pending_handshake_mgrs ,
115
+ connection_state -> handshake_mgr );
158
116
gpr_mu_unlock (& connection_state -> server_state -> mu );
159
117
grpc_handshake_manager_destroy (exec_ctx , connection_state -> handshake_mgr );
160
118
grpc_tcp_server_unref (exec_ctx , connection_state -> server_state -> tcp_server );
@@ -174,7 +132,8 @@ static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *tcp,
174
132
return ;
175
133
}
176
134
grpc_handshake_manager * handshake_mgr = grpc_handshake_manager_create ();
177
- pending_handshake_manager_add_locked (state , handshake_mgr );
135
+ grpc_handshake_manager_pending_list_add (& state -> pending_handshake_mgrs ,
136
+ handshake_mgr );
178
137
gpr_mu_unlock (& state -> mu );
179
138
grpc_tcp_server_ref (state -> tcp_server );
180
139
server_connection_state * connection_state =
@@ -213,8 +172,8 @@ static void tcp_server_shutdown_complete(grpc_exec_ctx *exec_ctx, void *arg,
213
172
gpr_mu_lock (& state -> mu );
214
173
grpc_closure * destroy_done = state -> server_destroy_listener_done ;
215
174
GPR_ASSERT (state -> shutdown );
216
- pending_handshake_manager_shutdown_locked ( exec_ctx , state ,
217
- GRPC_ERROR_REF (error ));
175
+ grpc_handshake_manager_pending_list_shutdown_all (
176
+ exec_ctx , state -> pending_handshake_mgrs , GRPC_ERROR_REF (error ));
218
177
gpr_mu_unlock (& state -> mu );
219
178
// Flush queued work before destroying handshaker factory, since that
220
179
// may do a synchronous unref.
0 commit comments