2
0
Эх сурвалжийг харах

logging: handle exception when stdout/stderr is closed

osy 4 жил өмнө
parent
commit
77d6ca13b4
1 өөрчлөгдсөн 12 нэмэгдсэн , 2 устгасан
  1. 12 2
      Managers/UTMLogging.m

+ 12 - 2
Managers/UTMLogging.m

@@ -65,7 +65,12 @@ void UTMLog(NSString *format, ...) {
         self.standardOutput.fileHandleForReading.readabilityHandler = ^(NSFileHandle *handle) {
             typeof(self) _self = _weakSelf;
             NSData *data = [handle availableData];
-            [_self.originalStdoutWrite writeData:data];
+            @try {
+                [_self.originalStdoutWrite writeData:data];
+            } @catch (NSException *e) {
+                // fd closed on us
+                _self.originalStdoutWrite = nil;
+            }
             [_self.fileOutputStream write:data.bytes maxLength:data.length];
         };
         self.standardError = [NSPipe pipe];
@@ -73,7 +78,12 @@ void UTMLog(NSString *format, ...) {
         self.standardError.fileHandleForReading.readabilityHandler = ^(NSFileHandle *handle) {
             typeof(self) _self = _weakSelf;
             NSData *data = [handle availableData];
-            [_self.originalStderrWrite writeData:data];
+            @try {
+                [_self.originalStderrWrite writeData:data];
+            } @catch (NSException *e) {
+                // fd closed on us
+                _self.originalStderrWrite = nil;
+            }
             [_self.fileOutputStream write:data.bytes maxLength:data.length];
             _self.lastErrorLine = [_self parseLastLine:data buffer:&errorBuffer];
         };