- such as ext2fsd.sys not calling IoUnregisterFileSystem()
{
KIRQL oldlvl;
PLIST_ENTRY current_entry;
{
KIRQL oldlvl;
PLIST_ENTRY current_entry;
- FILE_SYSTEM_OBJECT* current;
+ FILE_SYSTEM_OBJECT* current,*current_last=NULL;
PIRP Irp;
KEVENT Event;
IO_STATUS_BLOCK IoStatusBlock;
PIRP Irp;
KEVENT Event;
IO_STATUS_BLOCK IoStatusBlock;
KeInitializeEvent(&Event,NotificationEvent,FALSE);
/* 'current' will get IoDeleteDevice()ed by IRP_MJ_SHUTDOWN! */
KeInitializeEvent(&Event,NotificationEvent,FALSE);
/* 'current' will get IoDeleteDevice()ed by IRP_MJ_SHUTDOWN! */
- /* FIXME: deadlock loop detection */
while ((current_entry = FileSystemListHead.Flink)!=(&FileSystemListHead))
{
current = CONTAINING_RECORD(current_entry,FILE_SYSTEM_OBJECT,Entry);
while ((current_entry = FileSystemListHead.Flink)!=(&FileSystemListHead))
{
current = CONTAINING_RECORD(current_entry,FILE_SYSTEM_OBJECT,Entry);
+ if (current==current_last)
+ KeBugCheck(0); /* filesystem forgot to call IoUnregisterFileSystem() */
+ current_last=current;
/* send IRP_MJ_SHUTDOWN */
Irp = IoBuildSynchronousFsdRequest(IRP_MJ_SHUTDOWN,
/* send IRP_MJ_SHUTDOWN */
Irp = IoBuildSynchronousFsdRequest(IRP_MJ_SHUTDOWN,