Correctly check the sa_family and cast the data correctly before passing it to inet_nop, and don't be quite as fancy with the pointer arithmetic as the combination was causing us to segfault every time this debug message was called.
Signed-off-by: Ralph Castain <rhc@open-mpi.org>
Этот коммит содержится в:
родитель
0694d0bfbe
Коммит
470452cba0
@ -11,7 +11,7 @@
|
|||||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* Copyright (c) 2008-2010 Oracle and/or its affiliates. All rights reserved
|
* Copyright (c) 2008-2010 Oracle and/or its affiliates. All rights reserved
|
||||||
* Copyright (c) 2013-2015 Intel, Inc. All rights reserved
|
* Copyright (c) 2013-2017 Intel, Inc. All rights reserved.
|
||||||
* Copyright (c) 2014-2016 Research Organization for Information Science
|
* Copyright (c) 2014-2016 Research Organization for Information Science
|
||||||
* and Technology (RIST). All rights reserved.
|
* and Technology (RIST). All rights reserved.
|
||||||
* Copyright (c) 2015-2016 Los Alamos National Security, LLC. All rights
|
* Copyright (c) 2015-2016 Los Alamos National Security, LLC. All rights
|
||||||
@ -828,24 +828,27 @@ void mca_btl_tcp_proc_accept(mca_btl_tcp_proc_t* btl_proc, struct sockaddr* addr
|
|||||||
/* No further use of this socket. Close it */
|
/* No further use of this socket. Close it */
|
||||||
CLOSE_THE_SOCKET(sd);
|
CLOSE_THE_SOCKET(sd);
|
||||||
{
|
{
|
||||||
size_t len = 1024;
|
char *addr_str=NULL, *tmp, pnet[1024];
|
||||||
char* addr_str = (char*)malloc(len);
|
for (size_t i = 0; i < btl_proc->proc_endpoint_count; i++) {
|
||||||
if( NULL != addr_str ) {
|
mca_btl_base_endpoint_t* btl_endpoint = btl_proc->proc_endpoints[i];
|
||||||
memset(addr_str, 0, len);
|
if (btl_endpoint->endpoint_addr->addr_family != addr->sa_family) {
|
||||||
for (size_t i = 0; i < btl_proc->proc_endpoint_count; i++) {
|
continue;
|
||||||
mca_btl_base_endpoint_t* btl_endpoint = btl_proc->proc_endpoints[i];
|
|
||||||
if (btl_endpoint->endpoint_addr->addr_family != addr->sa_family) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (addr_str[0] != '\0') {
|
|
||||||
strncat(addr_str, ", ", len);
|
|
||||||
len -= 2;
|
|
||||||
}
|
|
||||||
strncat(addr_str, inet_ntop(AF_INET6, (void*)(struct in6_addr*)&btl_endpoint->endpoint_addr->addr_inet,
|
|
||||||
addr_str + 1024 - len, INET6_ADDRSTRLEN), len);
|
|
||||||
len = 1024 - strlen(addr_str);
|
|
||||||
}
|
}
|
||||||
|
if (AF_INET == addr->sa_family) {
|
||||||
|
inet_ntop(AF_INET, (void*)(struct in_addr*)&btl_endpoint->endpoint_addr->addr_inet, pnet, 1024);
|
||||||
|
} else if (AF_INET6 == addr->sa_family) {
|
||||||
|
inet_ntop(AF_INET6, (void*)(struct in6_addr*)&btl_endpoint->endpoint_addr->addr_inet, pnet, 1024);
|
||||||
|
} else {
|
||||||
|
/* unrecognized family */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (NULL == addr_str) {
|
||||||
|
(void)asprintf(&tmp, "\n\t%s", pnet);
|
||||||
|
} else {
|
||||||
|
(void)asprintf(&tmp, "%s\n\t%s", addr_str, pnet);
|
||||||
|
free(addr_str);
|
||||||
|
}
|
||||||
|
addr_str = tmp;
|
||||||
}
|
}
|
||||||
opal_show_help("help-mpi-btl-tcp.txt", "dropped inbound connection",
|
opal_show_help("help-mpi-btl-tcp.txt", "dropped inbound connection",
|
||||||
true, opal_process_info.nodename,
|
true, opal_process_info.nodename,
|
||||||
@ -853,8 +856,10 @@ void mca_btl_tcp_proc_accept(mca_btl_tcp_proc_t* btl_proc, struct sockaddr* addr
|
|||||||
btl_proc->proc_opal->proc_hostname,
|
btl_proc->proc_opal->proc_hostname,
|
||||||
OPAL_NAME_PRINT(btl_proc->proc_opal->proc_name),
|
OPAL_NAME_PRINT(btl_proc->proc_opal->proc_name),
|
||||||
opal_net_get_hostname((struct sockaddr*)addr),
|
opal_net_get_hostname((struct sockaddr*)addr),
|
||||||
addr_str);
|
(NULL == addr_str) ? "NONE" : addr_str);
|
||||||
free(addr_str);
|
if (NULL != addr_str) {
|
||||||
|
free(addr_str);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
OPAL_THREAD_UNLOCK(&btl_proc->proc_lock);
|
OPAL_THREAD_UNLOCK(&btl_proc->proc_lock);
|
||||||
}
|
}
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user