Skip to content

harpertoken/course

Repository files navigation

SystemManager

User-space system manager for macOS (Apple Silicon) using Swift. Orchestrates processes, monitors resources, enforces policies.

Key Fix

Refactored to actor-based data handling in RuntimeProcess. Data mutations now isolated in DataHandler actor, eliminating Sendable warnings and ensuring thread safety.

public actor DataHandler {
    private var stdoutData = Data()
    private var stderrData = Data()
    static let maxSize = 1_048_576 // 1 MB limit

    private func truncateIfNeeded(_ data: inout Data) {
        if data.count > Self.maxSize {
            data = data.suffix(Self.maxSize)
        }
    }

    func append(to stream: StreamType, data: Data) {
        switch stream {
        case .stdout:
            stdoutData.append(data)
            truncateIfNeeded(&stdoutData)
        case .stderr:
            stderrData.append(data)
            truncateIfNeeded(&stderrData)
        }
    }

    func getData() -> (stdout: String, stderr: String) {
        let stdout = String(data: stdoutData, encoding: .utf8) ?? ""
        let stderr = String(data: stderrData, encoding: .utf8) ?? ""
        return (stdout, stderr)
    }
}

Prior fix: Added NSLock for thread-safe Data mutation.

private let dataLock = NSLock()
// In append:
dataLock.lock()
stdoutData.append(data)
dataLock.unlock()
// In getData:
dataLock.lock()
let stdout = String(data: stdoutData, encoding: .utf8) ?? ""
dataLock.unlock()

Links

About

SystemManager: User-space macOS process orchestrator built in Swift

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published