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

相关文章

MySql死锁怎么排查的方法实现

《MySql死锁怎么排查的方法实现》本文主要介绍了MySql死锁怎么排查的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录前言一、死锁排查方法1. 查看死锁日志方法 1:启用死锁日志输出方法 2:检查 mysql 错误

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

MYSQL事务死锁问题排查及解决方案

《MYSQL事务死锁问题排查及解决方案》:本文主要介绍Java服务报错日志的情况,并通过一系列排查和优化措施,最终发现并解决了服务假死的问题,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录问题现象推测 1 - 客户端无错误重试配置推测 2 - 客户端超时时间过短推测 3 - mysql 版本问

【Linux修行路】线程安全和死锁

目录 ⛳️推荐 一、线程安全 1.1 常见的线程不安全情况 1.2 常见的线程安全情况 1.3 常见的不可重入情况 1.4 常见可重入的情况 1.5 可重入与线程安全的联系 1.6 可重入与线程安全的区别 二、死锁 2.1 死锁的四个必要条件 2.2 如何避免产生死锁? ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大

一道算法题引发的动态内存管理的思考

在做PKU2762时,需要建邻接表。 于是按部就班写了下面一个插入边到邻接表中的函数: const int VMAX = 1010;typedef struct Graph{int vex;Graph* next;}Graph;Graph ArcGraph[VMAX];void insert(int u, int v){Graph* t = new Graph;Graph*

模拟线程死锁——Thread学习笔记

记录一下之前写过的一段模拟死锁的代码: /*** 模拟死锁** @author lixiang* @date 2018年10月12日 - 9:51* @history 2018年10月12日 - 9:51 lixiang create.*/public class HoldLockDemo {private static Object[] lock = new Object[10];priv

引发蛀牙、避免蛀牙食物大全

引发蛀牙、避免蛀牙食物大全 引发蛀牙的食物大全: 糖果 糖浆 糖果棒 巧克力 碳酸饮料 果汁 口香糖 蜂蜜 蛋糕 甜点 薯片 脆饼干 果酱 果冻 蜜饯 蜜饯果干 避免蛀牙的食物大全: 高纤维蔬菜 水果 坚果 种子 高钙乳制品 高蛋白质肉类 高蛋白质鱼类 绿茶 水 蔬菜汤 鸡汤 酸奶 酸奶制品 奶酪 红薯 土豆 面包和全麦面包 芝士

捉虫笔记(四)-- 空格引发的悬案

空格引发的悬案 1、描述现象: 在代码中有一段利用rmdir指令删除目录代码,但是有用户反馈一直删除失败,但是有没有看到错误的日志信息,正好有同事能复现,所以今天好好探究一番。 2、思考过程 很好奇的一点就是为什么有的环境就是正常。 首先想到2个问题: ①代码有没有执行。 ②假如执行,有没有错误。 关于这两个问题都有个难点,我该如何下断点: 2.1、分析代码是否执行 删除目录的

“苹果税”引发的苹果与腾讯、字节跳动之间的纷争与博弈

北京时间9月10日凌晨一点的Apple特别活动日渐临近,苹果这次将会带来iPhone16系列新品手机及其他硬件产品的更新,包括iPad、Apple Watch、AirPods等。从特别活动的宣传图和宣传标语“閃亮時刻”来看,Apple Intelligence将会是史上首次推出,无疑将会是iOS 18的重头戏和高光时刻。 不过就在9月2日,一则“微信可能不支持iPhone16”的

【编程底层思考】如何检测和避免线程死锁

一、什么是线程死锁? 线程死锁发生在多个线程因为争夺资源而相互阻塞,导致程序无法正常结束的情况。例如,线程A持有资源2并等待资源1,线程B持有资源1并等待资源2,这样就形成了死锁。 二、如何检测死锁? 使用jmap、jstack等命令行工具查看JVM的线程栈和堆内存情况,jstack可以显示死锁信息。使用VisualVM、JConsole等图形化工具进行排查。例如,JConsole可以连接到