Can you get a stack trace of the hang? It could be you are passing in an invalid handle, but the DXE Core should check for this via the EFI_HANDLE_SIGNATURE that it uses internally to make sure handles are valid.
Thanks, Andrew Fish On Sep 5, 2013, at 12:44 PM, "David F." <[email protected]> wrote: > Hi, > > Using the SafeOpenProtocolLib in an application which basically does a > BY_DRIVER open if it can, if not then a BY_DRIVER | EXCLUSIVE to force things > off if it can, if that works then when it closes the protocol it also calls > reconnect(). A few things based on that... > > 1 - Media Paths Can't be opened (BY_HANDLE they can) - no big deal for me. > > 2 - Opening Disk IO Protocol fails (Block IO opened prior ok) > > 3 - Having a system lock up when reconnect is called if you don't do the > LocateHandleBuffer first. See the following proof (z can be set to different > values but failure is always there at the reopen). The same type of issue > occurs if you disconnect then reconnect a USB drive after the following if it > the reopen is commented out. So what's going on here??? > > // MotherBoard: Intel DH77KC > // BIOS: KCH7710H,86A,0108.2013.0305.1638 > // ALSO NOTE: No ATA Pass Thru protocol seems to be available for a SATA HD. > > #define UEFI_BS gBS > void ScanDevicesProof() > { > EFI_HANDLE savehandle; > SAFE_OPEN_PROTOCOL_LIB_HANDLE *safeblockhandle; > EFI_BLOCK_IO_PROTOCOL *blkio; > UINTN handlecount; > EFI_HANDLE *handlepointer; > EFI_STATUS status; > UINT z; > UINT i; > > for (z=0;z<2;z++) { > printf("***Next Z****\n"); > status=UEFI_BS->LocateHandleBuffer(ByProtocol, &gEfiBlockIoProtocolGuid, > NULL, &handlecount, &handlepointer); > if (!EFI_ERROR(status)) { > for (i=0; i<handlecount; i++) { > printf("open %p...", handlepointer[i]); > if ((safeblockhandle=SafeOpenProtocol(handlepointer[i], > &gEfiBlockIoProtocolGuid, (void**) &blkio, NULL))!=NULL) { > // save first handle for reopen > if (i==0) { > savehandle=handlepointer[i]; > } > printf("ok closing..."); > SafeCloseProtocol(safeblockhandle); > printf("ok\n"); > } > else printf("fail\n"); > } > UEFI_BS->FreePool(handlepointer); > } > } > > // open it and close it now > printf(">>>>>>> reopen (%p)...", savehandle); > if ((safeblockhandle=SafeOpenProtocol(savehandle, &gEfiBlockIoProtocolGuid, > (void**) &blkio, NULL))!=NULL) { > printf("ok closing..."); > SafeCloseProtocol(safeblockhandle); // <<<<<<<<<<<<<<< HANG ON RECONNECT > printf("ok\n"); > } > else printf("fail\n"); > printf("done\n"); > } > > ------------------------------------------------------------------------------ > Learn the latest--Visual Studio 2012, SharePoint 2013, SQL 2012, more! > Discover the easy way to master current and previous Microsoft technologies > and advance your career. Get an incredible 1,500+ hours of step-by-step > tutorial videos with LearnDevNow. Subscribe today and save! > http://pubads.g.doubleclick.net/gampad/clk?id=58041391&iu=/4140/ostg.clktrk_______________________________________________ > edk2-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/edk2-devel ------------------------------------------------------------------------------ Learn the latest--Visual Studio 2012, SharePoint 2013, SQL 2012, more! Discover the easy way to master current and previous Microsoft technologies and advance your career. Get an incredible 1,500+ hours of step-by-step tutorial videos with LearnDevNow. Subscribe today and save! http://pubads.g.doubleclick.net/gampad/clk?id=58041391&iu=/4140/ostg.clktrk _______________________________________________ edk2-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/edk2-devel
