syslog 引发死锁

2024-01-04 21:48
文章标签 死锁 引发 syslog

本文主要是介绍syslog 引发死锁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

主线程在写 syslog,同时在信号处理函数中也在写syslog,当主线程在写的时候,如果同时触发了信号,那么将会导致死锁。
$pstack 4289
#0 0x00000036768df9ee in __lll_lock_wait_private () from /lib64/libc.so.6
#1 0x000000367688d0dd in _L_lock_1685 () from /lib64/libc.so.6
#2 0x000000367688ce27 in __tz_convert () from /lib64/libc.so.6
#3 0x00000036768cff7d in __vsyslog_chk () from /lib64/libc.so.6
#4 0x00000036768d0580 in syslog () from /lib64/libc.so.6
#5 0x00000000004c8c81 in SigChldHandler ()
#6
#7 0x000000367688d2ad in __tzfile_compute () from /lib64/libc.so.6
#8 0x000000367688ce5f in __tz_convert () from /lib64/libc.so.6
#9 0x00000036768cff7d in __vsyslog_chk () from /lib64/libc.so.6
#10 0x00000036768d0580 in syslog () from /lib64/libc.so.6

#11 0x00000000004c5c21 in HandleNewBinRequest ()


根本原因是syslog内部会调用malloc,而malloc是不可重入函数,在信号处理函数中调用不可重入函数会导致死锁问题。


这篇关于syslog 引发死锁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/570701

相关文章

三个 insert 导致的死锁问题

锁种类 插入意向锁(insert intention lock)对已有数据行的修改与删除,必须加强互斥锁 X 锁,那对于数据的插入,是否还需要加这么强的锁,来实施互斥呢?插入意向锁,孕育而生。插入意向锁是间隙锁(Gap Locks)的一种,它是专门针对 insert 操作的,也是为数不多的在 RC 级别下产生 Gap 锁情况 锁兼容性 排他锁 X排他意向锁 IX共享锁 S共享意向锁 IS排他

Windows 与 Linux 下的 PAGE_ALIGN 页面对齐宏引发的 BUG

今天遇到了一个BUG,找了半天才定位到是 PAGE_ALIGN 宏导致的。 这个宏在 Windows 上和 Linux 上的定义不同,才得以引发了这次BUG的发生。   PAGE_ALIGN 的用处是对齐一个页面地址。 先来看看定义: // Windows#define PAGE_ALIGN(Va) ((PVOID)((ULONG_PTR)(Va) & ~(PAGE_SIZE

splunk指定syslog来源的sourcetype

日常工作使用splunk来分析数据,由于会接收到来自不同网络设备的数据,大多由sysylog发送出来,默认端口为udp的514端口,这样就会造成数据类型sourcetype没法确定,在使用过程中只能依靠host(来源ip)来判断,如果一台设备发送不同类型的数据,就没办法区分。因此需要用splunk的配置文件来指定udp:514的sourcetype。 在$HOME/etc/apps

多线程环境下 System.out.println 导致死锁问题分析

背景 一个文件采集系统,使用了多线程递归采集指定目录下的文件,并为每个目录创建一个线程去采集。 这个应用每隔几天就出现罢工情况,查看进程还在,堆内存空间还很充足,就是导出堆栈时,发现几乎所有的采集线程都处于 BLOCKED 状态了: "thread/dir/1718963987160" #82581 prio=5 os_prio=0 tid=0x00007f498c109000 nid=0x

MySQL 死锁查询和解决死锁

来了来了来了!客户现场又要骂街了,你们这是什么破系统怎么这么慢啊?!?! 今天遇到了mysql死锁,直接导致服务器CPU被PUA直接GUA了! 别的先别管,先看哪里死锁,或者哪里阻塞了。。。一定一定一定要先恢复现场使用,不然你会知道花儿为什么这样的红... 恢复使用后我们继续悠闲地排查吧。 1.查询是否锁表(肯定锁了一堆) show OPEN TABLES where In_use

一次压测引发的数据库 CPU 飙升

作者:昀鹤 一次压测过程中,当数据库的 qps 和 tps 都正常时,如果 cpu 利用率异常的高,应该如何排查?希望通过这篇文章,给你一些启发... 一、业务背景 业务需要控制频道内兑换现金的数量,于是在产品设计上给兑换现金增加了库存限制。 在此基础上形成了秒杀场景,峰值时核心接口 qps 上涨了近 600 倍(几十到几万) ,因此需要进行压测来对系统和 DB

小林图解系统-五.进程管理 5.4.怎么避免死锁?

死锁的概念 多线程编程中国,为了防止多线程竞争共享资源而导致数错乱,都会在操作共享资源之前加上互斥锁,只有成功获得锁的线程,才能操作共享资源,获取不到锁的线程就只能等待,直到锁被释放。 当两个线程为了保护两个不同的共享资源而使用了两个互斥锁,那么这两个互斥锁应用不当的时候,会造成两个线程都在等待对方释放锁,在没有外力的作用下,这些线程会一直相互等待,没办法继续运行,这种情况就是发生了死锁。

学习android中的Handler机制和由此引发的内存泄露以及解决办法

一、Handler机制以及使用方法          Handler、Looper、Message都是android的异步消息处理机制,异步消息处理线程启动之后,会进入一个无限循环体中,每循环一次从消息队列中取出一个消息,然后回调消息处理函数,执行完成之后,继续进行循环,如果消息队列为空,则线程会阻塞等待。  1   Looper作用:        创建一个MessageQueue,然后进

多线程(Lock锁,死锁,等待唤醒机制,阻塞队列,线程池)

Lock锁 虽然我们可以理解同步代码块和同步方法的锁对象问题但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock Lock实现提供比使用synchronized方法和语句可以获得更广泛的锁定操作Lock中提供了获得锁和释放锁的方法 void lock():获得锁void unlock():释放锁 即手动上锁、手动释放锁 L

Vue-观察器(watch)的定义方式引发组件初始值没有渲染成功问题(已解决)

问题描述:在测试环境发现一个问题,打开一张表单的时候,所有字段都成功赋上了值,唯独一个人员组件的值(出差人员)没有带出,而接口返回的数据是正常的,也就是说不是后端接口的问题,是前端组件渲染过程中出了差错。值得一提的是,出差人员这个字段是依据前面字段(“出版完成送出方式”)的值来动态生成的,只有其值为“出差人员带出”,那么“出差人员”这个字段才会生成。 以上就是背景。 在前端调试的过程中逐步