Fix listener search functions

The functions that searched for listeners compared both sockets and
addresses in the same function. This made its use error prone and caused
false positives in some cases.
This commit is contained in:
Markus Mäkelä
2019-05-06 15:50:07 +03:00
parent 956b7ee919
commit 95fd61b8dc
4 changed files with 47 additions and 22 deletions

View File

@ -4172,17 +4172,22 @@ int create_new_listener(CONFIG_CONTEXT* obj)
address = "";
}
if (auto l = listener_find_by_config(socket, address, port))
if (socket_defined)
{
if (auto l = listener_find_by_socket(socket))
{
MXS_ERROR("Creation of listener '%s' for service '%s' failed, because "
"listener '%s' already listens on socket %s.",
obj->name(), service->name(), l->name(), socket.c_str());
return 1;
}
}
else if (auto l = listener_find_by_address(address, port))
{
string socket_type = socket_defined ? "socket" : "port";
string socket_definition = socket_defined ? socket : obj->m_parameters.get_string(CN_PORT);
MXS_ERROR("Creation of listener '%s' for service '%s' failed, because "
"listener '%s' already listens on the %s %s.",
obj->name(),
service->name(),
l->name(),
socket_type.c_str(),
socket_definition.c_str());
"listener '%s' already listens on port %s.",
obj->name(), service->name(), l->name(),
obj->m_parameters.get_string(CN_PORT).c_str());
return 1;
}