X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/de355530ae67247cbd0da700edb3a2a1dae884c2..3a60a9f5b85abb8c2cf24e1926c5c7b3f608a5e2:/iokit/Kernel/IOMultiMemoryDescriptor.cpp diff --git a/iokit/Kernel/IOMultiMemoryDescriptor.cpp b/iokit/Kernel/IOMultiMemoryDescriptor.cpp index 98eb04d82..ea706f33a 100644 --- a/iokit/Kernel/IOMultiMemoryDescriptor.cpp +++ b/iokit/Kernel/IOMultiMemoryDescriptor.cpp @@ -87,7 +87,7 @@ IOMultiMemoryDescriptor * IOMultiMemoryDescriptor::withDescriptors( IOMemoryDescriptor ** descriptors, UInt32 withCount, IODirection withDirection, - bool asReference = false ) + bool asReference ) { // // Create a new IOMultiMemoryDescriptor. The "buffer" is made up of several @@ -118,7 +118,7 @@ bool IOMultiMemoryDescriptor::initWithDescriptors( IOMemoryDescriptor ** descriptors, UInt32 withCount, IODirection withDirection, - bool asReference = false ) + bool asReference ) { // // Initialize an IOMultiMemoryDescriptor. The "buffer" is made up of several @@ -131,10 +131,19 @@ bool IOMultiMemoryDescriptor::initWithDescriptors( assert(descriptors); assert(withCount); - // Ask our superclass' opinion. - - if ( super::init() == false ) return false; + // Release existing descriptors, if any + if ( _descriptors ) + { + for ( unsigned index = 0; index < _descriptorsCount; index++ ) + _descriptors[index]->release(); + if ( _descriptorsIsAllocated ) + IODelete(_descriptors, IOMemoryDescriptor *, _descriptorsCount); + } else { + // Ask our superclass' opinion. + if ( super::init() == false ) return false; + } + // Initialize our minimal state. _descriptors = 0;