Loading...
iokit/Kernel/IOHistogramReporter.cpp xnu-3248.50.21 xnu-3789.31.2
--- xnu/xnu-3248.50.21/iokit/Kernel/IOHistogramReporter.cpp
+++ xnu/xnu-3789.31.2/iokit/Kernel/IOHistogramReporter.cpp
@@ -62,6 +62,8 @@
             return reporter;
         }
     }
+    OSSafeReleaseNULL(reporter);
+    OSSafeReleaseNULL(tmpChannelName);
     
     return 0;
 }
@@ -208,7 +210,8 @@
             
             if (cnt3 >= _nElements) {
                 IORLOG("ERROR: _bucketBounds init");
-                return false;
+                result = false;
+                goto finish;
             }
             
             if (_histogramSegmentsConfig[cnt].scale_flag) {
@@ -245,21 +248,6 @@
     result = true;
     
 finish:
-    if (result != true) {
-        
-        if (_histogramSegmentsConfig)
-            IOFree(_histogramSegmentsConfig, configSize);
-        
-        if (_elements)
-            IOFree(_elements, elementsSize);
-        
-        if (_enableCounts)
-            IOFree(_enableCounts, eCountsSize);
-        
-        if (_bucketBounds)
-            IOFree(_bucketBounds, boundsSize);
-    }
-    
     return result;
 }
 
@@ -314,6 +302,33 @@
     return legendEntry;
 }
 
+IOReturn
+IOHistogramReporter::overrideBucketValues(unsigned int index, 
+                                          uint64_t bucket_hits,
+                                          int64_t bucket_min,
+                                          int64_t bucket_max,
+                                          int64_t bucket_sum)
+{
+    IOReturn result;
+    IOHistogramReportValues bucket;
+    lockReporter();
+
+    if (index >= (unsigned int)_bucketCount) {
+        result = kIOReturnBadArgument;
+        goto finish;
+    }
+
+    bucket.bucket_hits = bucket_hits;
+    bucket.bucket_min = bucket_min;
+    bucket.bucket_max = bucket_max;
+    bucket.bucket_sum = bucket_sum;
+
+    result = setElementValues(index, (IOReportElementValues *)&bucket);
+finish:
+    unlockReporter();
+    return result;
+}
+
 int
 IOHistogramReporter::tallyValue(int64_t value)
 {