diff --git a/collector/filesystem_macos.go b/collector/filesystem_macos.go index 26b30644..cc5c97ce 100644 --- a/collector/filesystem_macos.go +++ b/collector/filesystem_macos.go @@ -21,21 +21,25 @@ package collector #cgo LDFLAGS: -framework Foundation #import 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, }) }