U盘操作,导致线程卡死问题

最近在处理U盘操作出现系统卡死的问题

现象描述:

1.U盘在转储文件(将设备上文件拷贝到U盘上),有概率出现拷贝卡死,从而导致系统死机(通过插拔U盘,偶尔能够恢复正常)

2.文件并不大,大小也没有太大关心

3.部分U盘容易出来,其他不容易出来

4. 实验模拟,已经排除其他因素。当出现卡死的情况,是因为 CreateFile (创建一个空的文件)没有返回导致的,估计系统底层卡死了

      卡死之后,也不能进行其他文件操作,如果操作就系统死掉

尝试了很多方法,基本排除其他因素

后来,发现有一处奇怪地方:

在copy文件的之前,有一个操作 delete。也就是 不管文件是否已经存在U盘,都先delete,然后再对文件进行copy。

逻辑上,这样做并没有错误。

但实际效果,这样做的确存在很大概率性问题,由于CreateFile是API函数,也没底层函数,所以没办法跟踪究竟卡在什么流程上

分析:

当U盘插入时,系统仅仅识别到U盘,并没有读取文件系统?

如果读取文件,是否会读取文件系统?貌似只有有delete或写文件时,才能完整读取文件系统

不知道是否这样。当然也只有这样,系统处理才会快!

先给系统一个删除文件的指令,此时系统发现该U盘未曾识别(文件系统没有缓冲等),系统先加载文件系统

然后给一个创建文件的指令,等系统加载好文件系统,发现删除文件与创建文件存在冲突,估计有锁或保护措施,导致死等!

这样问题就出来了。

猜你喜欢

转载自www.cnblogs.com/winafa/p/11825380.html