X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/0a7de7458d150b5d4dffc935ba399be265ef0a1a..c3c9b80d004dbbfdf763edeb97968c6997e3b45b:/iokit/Kernel/IOSharedDataQueue.cpp diff --git a/iokit/Kernel/IOSharedDataQueue.cpp b/iokit/Kernel/IOSharedDataQueue.cpp index 797583bf8..4443e5fa7 100644 --- a/iokit/Kernel/IOSharedDataQueue.cpp +++ b/iokit/Kernel/IOSharedDataQueue.cpp @@ -26,10 +26,13 @@ * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ +#define IOKIT_ENABLE_SHARED_PTR + #include #include #include #include +#include #ifdef enqueue #undef enqueue @@ -43,29 +46,28 @@ OSDefineMetaClassAndStructors(IOSharedDataQueue, IODataQueue) -IOSharedDataQueue *IOSharedDataQueue::withCapacity(UInt32 size) +OSSharedPtr +IOSharedDataQueue::withCapacity(UInt32 size) { - IOSharedDataQueue *dataQueue = new IOSharedDataQueue; + OSSharedPtr dataQueue = OSMakeShared(); if (dataQueue) { if (!dataQueue->initWithCapacity(size)) { - dataQueue->release(); - dataQueue = 0; + return nullptr; } } return dataQueue; } -IOSharedDataQueue * +OSSharedPtr IOSharedDataQueue::withEntries(UInt32 numEntries, UInt32 entrySize) { - IOSharedDataQueue *dataQueue = new IOSharedDataQueue; + OSSharedPtr dataQueue = OSMakeShared(); if (dataQueue) { if (!dataQueue->initWithEntries(numEntries, entrySize)) { - dataQueue->release(); - dataQueue = 0; + return nullptr; } } @@ -98,7 +100,7 @@ IOSharedDataQueue::initWithCapacity(UInt32 size) } dataQueue = (IODataQueueMemory *)IOMallocAligned(allocSize, PAGE_SIZE); - if (dataQueue == 0) { + if (dataQueue == NULL) { return false; } bzero(dataQueue, allocSize); @@ -147,12 +149,12 @@ IOSharedDataQueue::free() super::free(); } -IOMemoryDescriptor * +OSSharedPtr IOSharedDataQueue::getMemoryDescriptor() { - IOMemoryDescriptor *descriptor = 0; + OSSharedPtr descriptor; - if (dataQueue != 0) { + if (dataQueue != NULL) { descriptor = IOMemoryDescriptor::withAddress(dataQueue, getQueueSize() + DATA_QUEUE_MEMORY_HEADER_SIZE + DATA_QUEUE_MEMORY_APPENDIX_SIZE, kIODirectionOutIn); } @@ -163,7 +165,7 @@ IOSharedDataQueue::getMemoryDescriptor() IODataQueueEntry * IOSharedDataQueue::peek() { - IODataQueueEntry *entry = 0; + IODataQueueEntry *entry = NULL; UInt32 headOffset; UInt32 tailOffset; @@ -177,12 +179,12 @@ IOSharedDataQueue::peek() tailOffset = __c11_atomic_load((_Atomic UInt32 *)&dataQueue->tail, __ATOMIC_ACQUIRE); if (headOffset != tailOffset) { - volatile IODataQueueEntry * head = 0; + volatile IODataQueueEntry * head = NULL; UInt32 headSize = 0; UInt32 headOffset = dataQueue->head; UInt32 queueSize = getQueueSize(); - if (headOffset >= queueSize) { + if (headOffset > queueSize) { return NULL; } @@ -239,7 +241,7 @@ IOSharedDataQueue::enqueue(void * data, UInt32 dataSize) entry = (IODataQueueEntry *)((UInt8 *)dataQueue->queue + tail); entry->size = dataSize; - memcpy(&entry->data, data, dataSize); + __nochk_memcpy(&entry->data, data, dataSize); // The tail can be out of bound when the size of the new entry // exactly matches the available space at the end of the queue. @@ -260,7 +262,7 @@ IOSharedDataQueue::enqueue(void * data, UInt32 dataSize) ((IODataQueueEntry *)((UInt8 *)dataQueue->queue + tail))->size = dataSize; } - memcpy(&dataQueue->queue->data, data, dataSize); + __nochk_memcpy(&dataQueue->queue->data, data, dataSize); newTail = entrySize; } else { return false; // queue is full @@ -273,7 +275,7 @@ IOSharedDataQueue::enqueue(void * data, UInt32 dataSize) entry = (IODataQueueEntry *)((UInt8 *)dataQueue->queue + tail); entry->size = dataSize; - memcpy(&entry->data, data, dataSize); + __nochk_memcpy(&entry->data, data, dataSize); newTail = tail + entrySize; } else { return false; // queue is full @@ -308,7 +310,7 @@ Boolean IOSharedDataQueue::dequeue(void *data, UInt32 *dataSize) { Boolean retVal = TRUE; - volatile IODataQueueEntry * entry = 0; + volatile IODataQueueEntry * entry = NULL; UInt32 entrySize = 0; UInt32 headOffset = 0; UInt32 tailOffset = 0; @@ -324,7 +326,7 @@ IOSharedDataQueue::dequeue(void *data, UInt32 *dataSize) tailOffset = __c11_atomic_load((_Atomic UInt32 *)&dataQueue->tail, __ATOMIC_ACQUIRE); if (headOffset != tailOffset) { - volatile IODataQueueEntry * head = 0; + volatile IODataQueueEntry * head = NULL; UInt32 headSize = 0; UInt32 queueSize = getQueueSize(); @@ -372,7 +374,7 @@ IOSharedDataQueue::dequeue(void *data, UInt32 *dataSize) // not enough space return false; } - memcpy(data, (void *)entry->data, entrySize); + __nochk_memcpy(data, (void *)entry->data, entrySize); *dataSize = entrySize; }