Fix the BdsExpandPartitionPartialDevicePathToFull() hang issue by duplicates BlockIoDevicePath when the CachedDevicePath returned from BdsLibDelPartMatchInstance() is NULL.

Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Chao B Zhang <chao.b.zhang@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14733 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Ruiyu Ni 2013-09-26 05:53:11 +00:00 committed by niruiyu
parent 798e4d22c4
commit e5a9b63cdf
1 changed files with 5 additions and 6 deletions

View File

@ -2637,17 +2637,16 @@ BdsExpandPartitionPartialDevicePathToFull (
TempNewDevicePath = CachedDevicePath; TempNewDevicePath = CachedDevicePath;
CachedDevicePath = BdsLibDelPartMatchInstance (CachedDevicePath, BlockIoDevicePath); CachedDevicePath = BdsLibDelPartMatchInstance (CachedDevicePath, BlockIoDevicePath);
FreePool(TempNewDevicePath); FreePool(TempNewDevicePath);
}
TempNewDevicePath = CachedDevicePath; if (CachedDevicePath != NULL) {
CachedDevicePath = AppendDevicePathInstance (BlockIoDevicePath, CachedDevicePath);
if (TempNewDevicePath != NULL) {
FreePool(TempNewDevicePath);
}
} else {
TempNewDevicePath = CachedDevicePath; TempNewDevicePath = CachedDevicePath;
CachedDevicePath = AppendDevicePathInstance (BlockIoDevicePath, CachedDevicePath); CachedDevicePath = AppendDevicePathInstance (BlockIoDevicePath, CachedDevicePath);
FreePool(TempNewDevicePath); FreePool(TempNewDevicePath);
} else {
CachedDevicePath = DuplicateDevicePath (BlockIoDevicePath);
} }
// //
// Here limit the device path instance number to 12, which is max number for a system support 3 IDE controller // Here limit the device path instance number to 12, which is max number for a system support 3 IDE controller
// If the user try to boot many OS in different HDs or partitions, in theory, // If the user try to boot many OS in different HDs or partitions, in theory,