Fixed close for socket to properly release the socket context structure and the handle.
Signed-off-by: lpleahy git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13802 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -22,6 +22,59 @@
|
||||
#include <Protocol/ServiceBinding.h>
|
||||
|
||||
|
||||
/**
|
||||
Free the socket resources
|
||||
|
||||
This releases the socket resources allocated by calling
|
||||
EslServiceGetProtocol.
|
||||
|
||||
This routine is called from the ::close routine in BsdSocketLib
|
||||
to release the socket resources.
|
||||
|
||||
@param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL
|
||||
structure
|
||||
|
||||
@return Value for ::errno, zero (0) indicates success.
|
||||
|
||||
**/
|
||||
int
|
||||
EslServiceFreeProtocol (
|
||||
IN EFI_SOCKET_PROTOCOL * pSocketProtocol
|
||||
)
|
||||
{
|
||||
EFI_SERVICE_BINDING_PROTOCOL * pServiceBinding;
|
||||
int RetVal;
|
||||
EFI_STATUS Status;
|
||||
|
||||
//
|
||||
// Assume success
|
||||
//
|
||||
RetVal = 0;
|
||||
|
||||
//
|
||||
// Locate the socket protocol
|
||||
//
|
||||
Status = gBS->LocateProtocol ( &gEfiSocketServiceBindingProtocolGuid,
|
||||
NULL,
|
||||
(VOID **) &pServiceBinding );
|
||||
if ( !EFI_ERROR ( Status )) {
|
||||
//
|
||||
// Release the handle
|
||||
//
|
||||
Status = pServiceBinding->DestroyChild ( pServiceBinding,
|
||||
pSocketProtocol->SocketHandle );
|
||||
}
|
||||
if ( EFI_ERROR ( Status )) {
|
||||
RetVal = EIO;
|
||||
}
|
||||
|
||||
//
|
||||
// Return the operation status
|
||||
//
|
||||
return RetVal;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Connect to the EFI socket library
|
||||
|
||||
|
Reference in New Issue
Block a user