Router: fixing assertion on app thread port handle.
A new application thread port message can be processed in the router after the application is removed from the router. Assertion for this case is replaced by a condition to store the new thread port until receiving the stop notification from the application process.
This commit is contained in:
@@ -44,6 +44,13 @@ with TLS certificate configured; the bug had appeared in 1.23.0.
|
|||||||
</para>
|
</para>
|
||||||
</change>
|
</change>
|
||||||
|
|
||||||
|
<change type="bugfix">
|
||||||
|
<para>
|
||||||
|
the router process could crash on rapid mutithreaded application
|
||||||
|
reconfiguration.
|
||||||
|
</para>
|
||||||
|
</change>
|
||||||
|
|
||||||
<change type="bugfix">
|
<change type="bugfix">
|
||||||
<para>
|
<para>
|
||||||
a descriptor and memory leak occurred in the router process when an app
|
a descriptor and memory leak occurred in the router process when an app
|
||||||
|
|||||||
@@ -680,18 +680,20 @@ nxt_router_new_port_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg)
|
|||||||
nxt_assert(main_app_port != NULL);
|
nxt_assert(main_app_port != NULL);
|
||||||
|
|
||||||
app = main_app_port->app;
|
app = main_app_port->app;
|
||||||
nxt_assert(app != NULL);
|
|
||||||
|
|
||||||
nxt_thread_mutex_lock(&app->mutex);
|
if (nxt_fast_path(app != NULL)) {
|
||||||
|
nxt_thread_mutex_lock(&app->mutex);
|
||||||
|
|
||||||
/* TODO here should be find-and-add code because there can be
|
/* TODO here should be find-and-add code because there can be
|
||||||
port waiters in port_hash */
|
port waiters in port_hash */
|
||||||
nxt_port_hash_add(&app->port_hash, port);
|
nxt_port_hash_add(&app->port_hash, port);
|
||||||
app->port_hash_count++;
|
app->port_hash_count++;
|
||||||
|
|
||||||
nxt_thread_mutex_unlock(&app->mutex);
|
nxt_thread_mutex_unlock(&app->mutex);
|
||||||
|
|
||||||
|
port->app = app;
|
||||||
|
}
|
||||||
|
|
||||||
port->app = app;
|
|
||||||
port->main_app_port = main_app_port;
|
port->main_app_port = main_app_port;
|
||||||
|
|
||||||
nxt_port_socket_write(task, port, NXT_PORT_MSG_PORT_ACK, -1, 0, 0, NULL);
|
nxt_port_socket_write(task, port, NXT_PORT_MSG_PORT_ACK, -1, 0, 0, NULL);
|
||||||
|
|||||||
Reference in New Issue
Block a user