Loading...
--- xnu/xnu-6153.41.3/iokit/Kernel/IOSharedDataQueue.cpp
+++ xnu/xnu-8019.41.5/iokit/Kernel/IOSharedDataQueue.cpp
@@ -26,10 +26,13 @@
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@
*/
+#define IOKIT_ENABLE_SHARED_PTR
+
#include <IOKit/IOSharedDataQueue.h>
#include <IOKit/IODataQueueShared.h>
#include <IOKit/IOLib.h>
#include <IOKit/IOMemoryDescriptor.h>
+#include <libkern/c++/OSSharedPtr.h>
#ifdef enqueue
#undef enqueue
@@ -43,29 +46,28 @@
OSDefineMetaClassAndStructors(IOSharedDataQueue, IODataQueue)
-IOSharedDataQueue *IOSharedDataQueue::withCapacity(UInt32 size)
-{
- IOSharedDataQueue *dataQueue = new IOSharedDataQueue;
+OSSharedPtr<IOSharedDataQueue>
+IOSharedDataQueue::withCapacity(UInt32 size)
+{
+ OSSharedPtr<IOSharedDataQueue> dataQueue = OSMakeShared<IOSharedDataQueue>();
if (dataQueue) {
if (!dataQueue->initWithCapacity(size)) {
- dataQueue->release();
- dataQueue = NULL;
+ return nullptr;
}
}
return dataQueue;
}
-IOSharedDataQueue *
+OSSharedPtr<IOSharedDataQueue>
IOSharedDataQueue::withEntries(UInt32 numEntries, UInt32 entrySize)
{
- IOSharedDataQueue *dataQueue = new IOSharedDataQueue;
+ OSSharedPtr<IOSharedDataQueue> dataQueue = OSMakeShared<IOSharedDataQueue>();
if (dataQueue) {
if (!dataQueue->initWithEntries(numEntries, entrySize)) {
- dataQueue->release();
- dataQueue = NULL;
+ return nullptr;
}
}
@@ -82,7 +84,7 @@
return false;
}
- _reserved = (ExpansionData *)IOMalloc(sizeof(struct ExpansionData));
+ _reserved = IOMallocType(ExpansionData);
if (!_reserved) {
return false;
}
@@ -115,7 +117,7 @@
appendix->version = 0;
if (!notifyMsg) {
- notifyMsg = IOMalloc(sizeof(mach_msg_header_t));
+ notifyMsg = IOMallocType(mach_msg_header_t);
if (!notifyMsg) {
return false;
}
@@ -134,23 +136,23 @@
IOFreeAligned(dataQueue, round_page(getQueueSize() + DATA_QUEUE_MEMORY_HEADER_SIZE + DATA_QUEUE_MEMORY_APPENDIX_SIZE));
dataQueue = NULL;
if (notifyMsg) {
- IOFree(notifyMsg, sizeof(mach_msg_header_t));
+ IOFreeType(notifyMsg, mach_msg_header_t);
notifyMsg = NULL;
}
}
if (_reserved) {
- IOFree(_reserved, sizeof(struct ExpansionData));
+ IOFreeType(_reserved, ExpansionData);
_reserved = NULL;
}
super::free();
}
-IOMemoryDescriptor *
+OSSharedPtr<IOMemoryDescriptor>
IOSharedDataQueue::getMemoryDescriptor()
{
- IOMemoryDescriptor *descriptor = NULL;
+ OSSharedPtr<IOMemoryDescriptor> descriptor;
if (dataQueue != NULL) {
descriptor = IOMemoryDescriptor::withAddress(dataQueue, getQueueSize() + DATA_QUEUE_MEMORY_HEADER_SIZE + DATA_QUEUE_MEMORY_APPENDIX_SIZE, kIODirectionOutIn);
@@ -182,7 +184,7 @@
UInt32 headOffset = dataQueue->head;
UInt32 queueSize = getQueueSize();
- if (headOffset >= queueSize) {
+ if (headOffset > queueSize) {
return NULL;
}