mirror of https://gitee.com/openkylin/libvirt.git
esx: Disable libcurl's use of signals to fix a segfault
libcurl uses a SIGALRM in combination with sigsetjmp/siglongjmp to be able to abort a DNS lookup when it takes too long. The problem with this in a multi-threaded application is that the signal handler for SIGALRM and the call to siglongjmp can be executed on a thread that is different from the one that initially did the SIGALRM setup and the call to sigsetjmp. In the reported case this triggered a segfault. Disable libcurl's use of signals to avoid this situation. This has the disadvantage of losing the ability to abort synchronous DNS lookups which might result in libcurl getting stuck in a DNS lookup in the worst case. When libcurl was build with an asynchronous DNS backend such as c-ares then there is no problem because the timeout mechanism works without signals here anyway. Reported by Benjamin Wang.
This commit is contained in:
parent
4bdc8606e6
commit
0821ea6b3c
|
@ -330,6 +330,7 @@ esxVI_CURL_Connect(esxVI_CURL *curl, esxUtil_ParsedUri *parsedUri)
|
|||
}
|
||||
|
||||
curl_easy_setopt(curl->handle, CURLOPT_USERAGENT, "libvirt-esx");
|
||||
curl_easy_setopt(curl->handle, CURLOPT_NOSIGNAL, 1);
|
||||
curl_easy_setopt(curl->handle, CURLOPT_HEADER, 0);
|
||||
curl_easy_setopt(curl->handle, CURLOPT_FOLLOWLOCATION, 0);
|
||||
curl_easy_setopt(curl->handle, CURLOPT_SSL_VERIFYPEER,
|
||||
|
|
Loading…
Reference in New Issue