国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

多線程中使用curl致coredump問題

2019-11-06 08:04:36
字體:
供稿:網(wǎng)友
coredump時的調(diào)用棧:#0  0x081eff2c in addbyter ()#1  0x081f05b8 in dPRintf_formatf ()#2  0x081f15cf in curl_mvsnprintf ()#3  0x081f0079 in curl_msnprintf ()#4  0x081ef55c in Curl_failf ()#5  0x081fa1a3 in Curl_resolv_timeout ()#6  0xeb8fbdd4 in ?? ()#7  0x00000000 in ?? ()coredump的原因是因為curl的DNS解析超時控制是使用SIGALARM實現(xiàn)的。這樣導(dǎo)致發(fā)現(xiàn)SIGALARM會出現(xiàn)多線程修改同一個全局變量,由此產(chǎn)生了COREDUMP。問題發(fā)生的前提是設(shè)置了CURLOPT_TIMEOUT或CURLOPT_CONNECTTIMEOUT,并且值不為0。解決辦法:1) 設(shè)置CURLOPT_NOSIGNAL的值為12) 使用c-ares(configure時指定參數(shù)--enable-ares)lib/curl_setup.h(異步模式使用c-ares控制DNS解析超時):只有當(dāng)configure時指定了--enable-ares才會定義USE_ARES。#ifdef USE_ARES#  define CURLRES_ASYNCH#  define CURLRES_ARES/* now undef the stock libc functions just to avoid them being used */#  undef HAVE_GETADDRINFO#  undef HAVE_GETHOSTBYNAME#elif defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32)#  define CURLRES_ASYNCH#  define CURLRES_THREADED#else#  define CURLRES_SYNCH#endiflib/hostip.c(同步模式使用ALARM控制DNS解析超時):只有定義了CURLRES_SYNCH,才可能定義USE_ALARM_TIMEOUT。#if defined(CURLRES_SYNCH) && /    defined(HAVE_ALARM) && defined(SIGALRM) && defined(HAVE_SIGSETJMP)/* alarm-based timeouts can only be used with all the dependencies satisfied */#define USE_ALARM_TIMEOUT#endif相關(guān)源代碼:lib/asyn-ares.c:Curl_resolver_getaddrinfolib/hostasyn.c(基于c-ares的異步版本Curl_getaddrinfo):Curl_resolver_getaddrinfo <-- Curl_getaddrinfo從緩存中找(hostip.c):fetch_addr <-- Curl_resolvhostip.c:Curl_ipv4_resolve_r <-- Curl_getaddrinfo <-- Curl_resolvhostip.c:curl_jmpenv <-- sigaction(SIGALRM, alarmfunc)/sigsetjmp(curl_jmpenv) <- Curl_resolv_timeout <- url.c:Curl_resolv_timeout(hostname) <-- resolve_server <-- create_conn <-- Curl_connect multi.c:Curl_connect <--transfer.cCurl_connect <-- Curl_reconnect_requesturl.c:Curl_reconnect_request <-- Curl_domulti.c:Curl_do <-- multi_runsingle <-- curl_multi_perform <-- multi_socket <-- curl_multi_socket
上一篇:leetcode-155-Min Stack

下一篇:HDU2319 Card Trick

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 庄浪县| 如皋市| 烟台市| 商都县| 周口市| 嘉鱼县| 民乐县| 漳浦县| 牟定县| 方山县| 巩义市| 莆田市| 天峨县| 昭平县| 永济市| 沐川县| 措美县| 锦州市| 舟曲县| 湘乡市| 阜宁县| 顺义区| 九寨沟县| 栾川县| 陆河县| 兴安盟| 栾城县| 惠安县| 广德县| 雷波县| 桃江县| 新乡县| 突泉县| 达州市| 铜陵市| 肥东县| 开封市| 随州市| 徐州市| 耒阳市| 黄山市|