一个很深的bug - 句柄被异常关闭
2011-05-13 11:55
141 查看
昨天系统出现了问题,现象是日志从进入守护进程模式后就再也不出了,检查了半天也没查出问题。
下午的代码走查会议,无意中找到了问题的原因。
原来一个模块新加的初始化函数被放到了日志模块的初始化函数之前,那个初始化函数对一个未初始化的句柄数组逐一执行了close操作。
数组中其中一个成员为0-3之间的数值,导致了日志模块初始化的时候,open日志文件时候得到的句柄为0-3之间的数字,然后进入守护进程的函数里在fork之后执行了对0-3的close,这导致了日志文件的句柄被关闭,从而使得后面就再也没有日志了。
改那个新模块的close操作为直接把句柄设置为-1,问题解决。
下午的代码走查会议,无意中找到了问题的原因。
原来一个模块新加的初始化函数被放到了日志模块的初始化函数之前,那个初始化函数对一个未初始化的句柄数组逐一执行了close操作。
数组中其中一个成员为0-3之间的数值,导致了日志模块初始化的时候,open日志文件时候得到的句柄为0-3之间的数字,然后进入守护进程的函数里在fork之后执行了对0-3的close,这导致了日志文件的句柄被关闭,从而使得后面就再也没有日志了。
改那个新模块的close操作为直接把句柄设置为-1,问题解决。
相关文章推荐
- 修复 ThinkPHP3.2.3 抛出异常模块的一个BUG,关闭字段缓存功能
- 发现 liboauth 的一个 bug:FUSE 下 oauth_gen_nonce() 结果异常
- 一个文件关闭不掉的bug
- nc的一个bug,nc ip port -e cmd.exe 命令后ctrl+c后不会关闭连接[已解决]
- 关于UDP消息服务抛出“远程主机强迫关闭了一个现有的连接”的异常说明及处理方法
- erlang关闭一个socket进入死循环的bug修复过程
- Android开发abd相关异常:Adb connection Error:远程主机强迫关闭了一个现有的连接
- C++ 中CloseHandle 函数--关闭一个句柄
- mediaserver 异常挂掉引起的一个BUG
- 解决一个远程主机强迫关闭连接的bug
- DockPanel的一个异常BUG【DockPanel Suite2.4 存在BUG】
- 一个java 类构造器 异常的bug
- c#中已知一个外部窗口的句柄,怎么关闭
- 一个GDIPlus的Bug -- OutofMemory异常
- Duwamish示例中异常记录的一个小bug
- 一个关于android WindowManangerService layer 异常的bug
- 用WindowFromPoint()函数来获得鼠标所在位置的窗口的句柄--发生一个关闭窗口的消息---关闭鼠标所在的窗口
- CE5:致命的应用程序错误,应用程序执行了一个非法操作,将被关闭,异常:0xc0000005
- 【经典BUG】exe与dll同时使用Lua的一个内存崩溃异常
- fopen() 返回 NULL, 奇葩原因:当前进程打开多个句柄,忘记关闭。(bug)