}
}
-/* Prepare SERVER_INETADDR event
+/* Prepare SERVER_INETADDR event, prev data is learned from the current
+ * server settings.
*
* This special event will contain extra hints related to the addr change
*
+ * Must be called with the server lock held.
*/
-void _srv_event_hdl_prepare_inetaddr(struct event_hdl_cb_data_server_inetaddr *cb_data,
- struct sockaddr_storage *prev_addr, unsigned int prev_port,
- struct sockaddr_storage *next_addr, unsigned int next_port,
- uint8_t purge_conn)
+static void _srv_event_hdl_prepare_inetaddr(struct event_hdl_cb_data_server_inetaddr *cb_data,
+ struct server *srv,
+ const struct sockaddr_storage *next_addr,
+ unsigned int next_port,
+ uint8_t purge_conn)
{
+ struct sockaddr_storage *prev_addr = &srv->addr;
+ unsigned int prev_port = srv->svc_port;
+
/* only INET families are supported */
BUG_ON((prev_addr->ss_family != AF_UNSPEC &&
prev_addr->ss_family != AF_INET && prev_addr->ss_family != AF_INET6) ||
};
_srv_event_hdl_prepare(&cb_data.common, s, 0);
- _srv_event_hdl_prepare_inetaddr(&cb_data.addr, &s->addr, s->svc_port, &new_addr, s->svc_port, 0);
+ _srv_event_hdl_prepare_inetaddr(&cb_data.addr, s, &new_addr, s->svc_port, 0);
/* server_atomic_sync_task will apply the changes for us */
_srv_event_hdl_publish(EVENT_HDL_SUB_SERVER_INETADDR, cb_data, s);
out:
if (ip_change || port_change) {
_srv_event_hdl_prepare(&cb_data.common, s, 0);
- _srv_event_hdl_prepare_inetaddr(&cb_data.addr, &s->addr, s->svc_port,
+ _srv_event_hdl_prepare_inetaddr(&cb_data.addr, s,
((ip_change) ? &sa : &s->addr),
((port_change) ? new_port : s->svc_port),
1);