荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jjk (==面壁大师==), 信区: InstallBBS
标  题: r_msg()存在bug[转载]
发信站: 荔园晨风BBS站 (Thu Jun 27 19:30:09 2002), 转信

发信人: quickmouse (bbs.whnet.edu.cn), 信区: BugReport
标  题: r_msg()存在bug
发信站: 快意灌水站 (2001年03月12日17:32:45 星期一), 站内信件

发信人: quickmouse (碰猫死翘翘※静心尽力), 信区: BBSDev
标  题: FB2000当中消息处理的bug
发信站: 武汉白云黄鹤站 (2001年03月12日17:13:04 星期一), 转信

本文只是提出有这样的bug,还没有解决
请先看以下文字片段,摘自《UNIX环境高级编程》
进程捕捉到信号并继续执行时,它首先执行该信号处理程序中的指令。如果从信号处理
程序返回(例如没有调用exit或longjmp),则继续执行在捕捉到信号时进
程正在执行的正常指令序列(这类似于硬件中断发生时所做的)。但在信号处理程序中
,不能判断捕捉到信号时进程执行到何处。如果进程正在执行malloc,在其堆中
分配另外的存储空间,而此时由于捕捉到信号插入执行该信号处理程序,其中又调用
malloc,这时会发生什么?又例如若进程正在执行getpwnam (见6 . 2 节)
这种将其结果存放在静态存储单元中的函数,而插入执行的信号处理程序中又调用这样
的函数,这时又会发生什么呢? 在malloc 例中子,可能会对进程造成破坏,因为
malloc通常为它所分配的存储区保持一个连接表,而插入执行信号处理程序时,
进程可能正在更改此连接表。在getpwname的例子中,正常返回给调用者的信息
可能由返回至信号处理程序的信息覆盖。

在FB2000处理消息的函数r_msg()当中,采用了fgets函数。fgets函数是一个系统通用
缓冲I/O函数,该函数通过在系统当中获得一块缓冲区读取文件的数据,根据gdb观察
是通过的malloc调用。因此,如果用户正在阅读的时候,很可能有其他的函数正在通过
使用malloc的函数调用实现内存空间分配和缓冲I/O,这个是很危险的,并且在实例当中
也观察到确实有死锁的情况发生。
--
             ☆两个人相互辉映,光芒胜过夜晚繁星☆

       E-mail:QuickMouse@263.net  QuickMouse@Chinaren.com
--
※ 来源:·快意灌水站 fb2000.dhs.org·[FROM: 211.69.197.75]
--
※ 转寄:.温馨小屋 bbs.feeling.dhs.org.[FROM: freebsd.szu.edu.]
--
※ 修改:·jjksam 於 Jun 28 08:40:27 修改本文·[FROM: 192.168.0.146]
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店