• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 多线程中使用curl致coredump问题

多线程中使用curl致coredump问题

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了php curl 多线程,curl 多线程,coredump,coredump是什么,linux coredump等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

多线程中使用curl致coredump问题


coredump时的调用栈:
#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实现的。
这样导致发现SIGALARM会出现多线程修改同一个全局变量,由此产生了COREDUMP。
问题发生的前提是设置了CURLOPT_TIMEOUT或CURLOPT_CONNECTTIMEOUT,并且值不为0。


解决办法:
1) 设置CURLOPT_NOSIGNAL的值为1
2) 使用c-ares(configure时指定参数--enable-ares)


lib/curl_setup.h(异步模式使用c-ares控制DNS解析超时):
只有当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
#endif


lib/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


相关源代码:


lib/asyn-ares.c:
Curl_resolver_getaddrinfo


lib/hostasyn.c(基于c-ares的异步版本Curl_getaddrinfo):
Curl_resolver_getaddrinfo <-- Curl_getaddrinfo


从缓存中找(hostip.c):
fetch_addr <-- Curl_resolv


hostip.c:
Curl_ipv4_resolve_r <-- Curl_getaddrinfo <-- Curl_resolv


hostip.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.c
Curl_connect <-- Curl_reconnect_request


url.c:
Curl_reconnect_request <-- Curl_do


multi.c:
Curl_do <-- multi_runsingle <-- curl_multi_perform <-- multi_socket <-- curl_multi_socket

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 多线程中使用curl致coredump问题

相关文章

  • 2017-05-26静态库和动态库的生成和加载详解
  • 2017-05-26WebView,androidwebview
  • 2017-05-26android开发,权限获取,android开发权限
  • 2017-05-26Android开发:Android SDK的介绍
  • 2017-05-26linux syslog日志服务器的搭建
  • 2017-05-26Android之网络数据存储,android数据存储
  • 2017-05-26硅谷新闻1--引导界面GuideActivity,1--guideactivity
  • 2017-05-26ORA-16038/ORA-00742: Log read detects lost write in thread
  • 2017-05-26Android Activity生命周期与启动模式,androidactivity
  • 2017-05-26ArcGIS for Android地图控件的5大常见操作转,arcgisandroid

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android,androidstudio
    • andriod 读取通讯录,andriod通讯录
    • Android自定义下拉刷新动画--仿百度外卖下拉刷新
    • 计算facebook sdk需要的key hashes,facebookhashes
    • android红米等关于读取本地文件夹图片获取路径的问题的解决,
    • Android自定义ViewGroup打造各种风格的SlidingMenu
    • 高仿360手机卫士应用源码,高仿360卫士源码
    • Android IPC机制(四):细说Binder连接池
    • 自己实现android侧滑菜单
    • 【Android】由浅到深理解AIDL

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有