mirror of
https://github.com/prometheus/node_exporter.git
synced 2025-08-20 18:33:52 -07:00
Fix macos filesystem collector cgo memory leak (#3315)
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
This commit is contained in:
parent
38d32a3977
commit
43fb05c81d
|
@ -21,21 +21,25 @@ package collector
|
|||
#cgo LDFLAGS: -framework Foundation
|
||||
#import <Foundation/Foundation.h>
|
||||
Float64 purgeable(char *path) {
|
||||
CFNumberRef tmp;
|
||||
NSError *error = nil;
|
||||
NSString *str = [NSString stringWithUTF8String:path];
|
||||
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:str];
|
||||
NSDictionary *results = [fileURL resourceValuesForKeys:@[NSURLVolumeAvailableCapacityForImportantUsageKey] error:&error];
|
||||
if (results) {
|
||||
if ((tmp = CFDictionaryGetValue((CFDictionaryRef)results, NSURLVolumeAvailableCapacityForImportantUsageKey)) == NULL) {
|
||||
return -1.0f;
|
||||
}
|
||||
Float64 value;
|
||||
if (CFNumberGetValue(tmp, kCFNumberFloat64Type, &value)) {
|
||||
return value;
|
||||
Float64 value = -1.0f;
|
||||
|
||||
@autoreleasepool {
|
||||
NSError *error = nil;
|
||||
NSString *str = [NSString stringWithUTF8String:path];
|
||||
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:str];
|
||||
|
||||
NSDictionary *results = [fileURL resourceValuesForKeys:@[NSURLVolumeAvailableCapacityForImportantUsageKey] error:&error];
|
||||
if (results) {
|
||||
CFNumberRef tmp = CFDictionaryGetValue((CFDictionaryRef)results, NSURLVolumeAvailableCapacityForImportantUsageKey);
|
||||
if (tmp != NULL) {
|
||||
CFNumberGetValue(tmp, kCFNumberFloat64Type, &value);
|
||||
}
|
||||
}
|
||||
|
||||
[fileURL release];
|
||||
}
|
||||
return -1.0f;
|
||||
|
||||
return value;
|
||||
}
|
||||
*/
|
||||
import "C"
|
||||
|
@ -88,6 +92,9 @@ func (c *filesystemCollector) GetStats() (stats []filesystemStats, err error) {
|
|||
ro = 1
|
||||
}
|
||||
|
||||
mountpointCString := C.CString(mountpoint)
|
||||
defer C.free(unsafe.Pointer(mountpointCString))
|
||||
|
||||
stats = append(stats, filesystemStats{
|
||||
labels: filesystemLabels{
|
||||
device: device,
|
||||
|
@ -99,7 +106,7 @@ func (c *filesystemCollector) GetStats() (stats []filesystemStats, err error) {
|
|||
avail: float64(mnt[i].f_bavail) * float64(mnt[i].f_bsize),
|
||||
files: float64(mnt[i].f_files),
|
||||
filesFree: float64(mnt[i].f_ffree),
|
||||
purgeable: float64(C.purgeable(C.CString(mountpoint))),
|
||||
purgeable: float64(C.purgeable(mountpointCString)),
|
||||
ro: ro,
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue