- Jean-Francois Bertrand reported a libcurl crash with CURLOPT_TCP_NODELAY
since libcurl used getprotobyname() and that isn't thread-safe. We now switched to use IPPROTO_TCP unconditionally, but perhaps the proper fix is to detect the thread-safe version of the function and use that. http://curl.haxx.se/mail/lib-2008-05/0011.html
This commit is contained in:
@@ -685,7 +685,14 @@ static void tcpnodelay(struct connectdata *conn,
|
||||
socklen_t onoff = (socklen_t) data->set.tcp_nodelay;
|
||||
int proto = IPPROTO_TCP;
|
||||
|
||||
#ifdef HAVE_GETPROTOBYNAME
|
||||
#if 0
|
||||
/* The use of getprotobyname() is disabled since it isn't thread-safe on
|
||||
numerous systems. On these getprotobyname_r() should be used instead, but
|
||||
that exists in at least one 4 arg version and one 5 arg version, and
|
||||
since the proto number rarely changes anyway we now just use the hard
|
||||
coded number. The "proper" fix would need a configure check for the
|
||||
correct function much in the same style the gethostbyname_r versions are
|
||||
detected. */
|
||||
struct protoent *pe = getprotobyname("tcp");
|
||||
if(pe)
|
||||
proto = pe->p_proto;
|
||||
|
||||
Reference in New Issue
Block a user