Skip to content
Snippets Groups Projects
Commit 8bc31051 authored by George Nachman's avatar George Nachman
Browse files

Remove mechanism for catching proc_pidinfo and statfs timeouts. It was causing...

Remove mechanism for catching proc_pidinfo and statfs timeouts. It was causing crashes, but I don't understand why. Perhaps mixing ARC and non-ARC code has some problem? I saw lots of crashes on 3.1.4 where proc_pidinfo exceeded the timeout and when it finally returned there was heap corruption. It looked as though the dispatch group had been freed even though there was an outstanding reference to it. At any rate, if proc_pidinfo is hanging you're going to have a bad time even without this workaround.
parent 26838c29
No related branches found
No related tags found
No related merge requests found
Loading
@@ -1267,8 +1267,6 @@
Loading
@@ -1267,8 +1267,6 @@
A61D16FC1AAFD5530013FCCA /* iTermBackgroundColorRun.h in Headers */ = {isa = PBXBuildFile; fileRef = A61D16FA1AAFD5530013FCCA /* iTermBackgroundColorRun.h */; }; A61D16FC1AAFD5530013FCCA /* iTermBackgroundColorRun.h in Headers */ = {isa = PBXBuildFile; fileRef = A61D16FA1AAFD5530013FCCA /* iTermBackgroundColorRun.h */; };
A61D16FD1AAFD5530013FCCA /* iTermBackgroundColorRun.h in Headers */ = {isa = PBXBuildFile; fileRef = A61D16FA1AAFD5530013FCCA /* iTermBackgroundColorRun.h */; }; A61D16FD1AAFD5530013FCCA /* iTermBackgroundColorRun.h in Headers */ = {isa = PBXBuildFile; fileRef = A61D16FA1AAFD5530013FCCA /* iTermBackgroundColorRun.h */; };
A61F8E301E62591800D315D0 /* iTermFakeUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = A61F8E2F1E62591800D315D0 /* iTermFakeUserDefaults.m */; }; A61F8E301E62591800D315D0 /* iTermFakeUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = A61F8E2F1E62591800D315D0 /* iTermFakeUserDefaults.m */; };
A623D9471F8972750011F8C3 /* iTermCallWithTimeout.h in Headers */ = {isa = PBXBuildFile; fileRef = A623D9451F8972750011F8C3 /* iTermCallWithTimeout.h */; };
A623D9481F8972750011F8C3 /* iTermCallWithTimeout.m in Sources */ = {isa = PBXBuildFile; fileRef = A623D9461F8972750011F8C3 /* iTermCallWithTimeout.m */; };
A623D94B1F8984690011F8C3 /* key.png in Resources */ = {isa = PBXBuildFile; fileRef = A623D9491F8983D70011F8C3 /* key.png */; }; A623D94B1F8984690011F8C3 /* key.png in Resources */ = {isa = PBXBuildFile; fileRef = A623D9491F8983D70011F8C3 /* key.png */; };
A623D94C1F8984690011F8C3 /* key.png in Resources */ = {isa = PBXBuildFile; fileRef = A623D9491F8983D70011F8C3 /* key.png */; }; A623D94C1F8984690011F8C3 /* key.png in Resources */ = {isa = PBXBuildFile; fileRef = A623D9491F8983D70011F8C3 /* key.png */; };
A623D94D1F89846A0011F8C3 /* key.png in Resources */ = {isa = PBXBuildFile; fileRef = A623D9491F8983D70011F8C3 /* key.png */; }; A623D94D1F89846A0011F8C3 /* key.png in Resources */ = {isa = PBXBuildFile; fileRef = A623D9491F8983D70011F8C3 /* key.png */; };
Loading
@@ -3251,8 +3249,6 @@
Loading
@@ -3251,8 +3249,6 @@
A61D16FB1AAFD5530013FCCA /* iTermBackgroundColorRun.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iTermBackgroundColorRun.m; sourceTree = "<group>"; }; A61D16FB1AAFD5530013FCCA /* iTermBackgroundColorRun.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iTermBackgroundColorRun.m; sourceTree = "<group>"; };
A61F8E2E1E62591800D315D0 /* iTermFakeUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iTermFakeUserDefaults.h; sourceTree = "<group>"; }; A61F8E2E1E62591800D315D0 /* iTermFakeUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iTermFakeUserDefaults.h; sourceTree = "<group>"; };
A61F8E2F1E62591800D315D0 /* iTermFakeUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iTermFakeUserDefaults.m; sourceTree = "<group>"; }; A61F8E2F1E62591800D315D0 /* iTermFakeUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iTermFakeUserDefaults.m; sourceTree = "<group>"; };
A623D9451F8972750011F8C3 /* iTermCallWithTimeout.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = iTermCallWithTimeout.h; sourceTree = "<group>"; };
A623D9461F8972750011F8C3 /* iTermCallWithTimeout.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = iTermCallWithTimeout.m; sourceTree = "<group>"; };
A623D9491F8983D70011F8C3 /* key.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = key.png; path = images/key.png; sourceTree = "<group>"; }; A623D9491F8983D70011F8C3 /* key.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = key.png; path = images/key.png; sourceTree = "<group>"; };
A623D94A1F8983D80011F8C3 /* key@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "key@2x.png"; path = "images/key@2x.png"; sourceTree = "<group>"; }; A623D94A1F8983D80011F8C3 /* key@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "key@2x.png"; path = "images/key@2x.png"; sourceTree = "<group>"; };
A624230F19CF6B0C00182C08 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = ThirdParty/Sparkle.framework; sourceTree = "<group>"; }; A624230F19CF6B0C00182C08 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = ThirdParty/Sparkle.framework; sourceTree = "<group>"; };
Loading
@@ -5738,8 +5734,6 @@
Loading
@@ -5738,8 +5734,6 @@
A65EC02E1F31800300AC0A6B /* iTermUpdateCadenceController.m */, A65EC02E1F31800300AC0A6B /* iTermUpdateCadenceController.m */,
A65EC0311F3181E700AC0A6B /* NSTimer+iTerm.h */, A65EC0311F3181E700AC0A6B /* NSTimer+iTerm.h */,
A65EC0321F3181E700AC0A6B /* NSTimer+iTerm.m */, A65EC0321F3181E700AC0A6B /* NSTimer+iTerm.m */,
A623D9451F8972750011F8C3 /* iTermCallWithTimeout.h */,
A623D9461F8972750011F8C3 /* iTermCallWithTimeout.m */,
); );
name = Helpers; name = Helpers;
sourceTree = "<group>"; sourceTree = "<group>";
Loading
@@ -6885,7 +6879,6 @@
Loading
@@ -6885,7 +6879,6 @@
A667193D1DCE36C3000CE608 /* iTermHotkeyPreferencesModel.h in Headers */, A667193D1DCE36C3000CE608 /* iTermHotkeyPreferencesModel.h in Headers */,
A667193E1DCE36C3000CE608 /* NSLocale+iTerm.h in Headers */, A667193E1DCE36C3000CE608 /* NSLocale+iTerm.h in Headers */,
A667193F1DCE36C3000CE608 /* iTermDirectoryTree.h in Headers */, A667193F1DCE36C3000CE608 /* iTermDirectoryTree.h in Headers */,
A623D9471F8972750011F8C3 /* iTermCallWithTimeout.h in Headers */,
A66719401DCE36C3000CE608 /* iTermOpenQuicklyCommands.h in Headers */, A66719401DCE36C3000CE608 /* iTermOpenQuicklyCommands.h in Headers */,
A62A1F761E711BC000363EE9 /* iTermHelpMessageViewController.h in Headers */, A62A1F761E711BC000363EE9 /* iTermHelpMessageViewController.h in Headers */,
A66719411DCE36C3000CE608 /* iTermSystemVersion.h in Headers */, A66719411DCE36C3000CE608 /* iTermSystemVersion.h in Headers */,
Loading
@@ -8428,7 +8421,6 @@
Loading
@@ -8428,7 +8421,6 @@
A65EC0301F31800300AC0A6B /* iTermUpdateCadenceController.m in Sources */, A65EC0301F31800300AC0A6B /* iTermUpdateCadenceController.m in Sources */,
A66719661DCE3772000CE608 /* iTermWebSocketFrame.m in Sources */, A66719661DCE3772000CE608 /* iTermWebSocketFrame.m in Sources */,
A65EC0341F3181E700AC0A6B /* NSTimer+iTerm.m in Sources */, A65EC0341F3181E700AC0A6B /* NSTimer+iTerm.m in Sources */,
A623D9481F8972750011F8C3 /* iTermCallWithTimeout.m in Sources */,
A66EF82D1EF59CFC0005891A /* iTermRateLimitedUpdate.m in Sources */, A66EF82D1EF59CFC0005891A /* iTermRateLimitedUpdate.m in Sources */,
A66719601DCE3772000CE608 /* iTermAPIServer.m in Sources */, A66719601DCE3772000CE608 /* iTermAPIServer.m in Sources */,
A60BB38F1EB6A08A00D76C09 /* iTermProcessCollection.m in Sources */, A60BB38F1EB6A08A00D76C09 /* iTermProcessCollection.m in Sources */,
Loading
@@ -40,13 +40,6 @@
Loading
@@ -40,13 +40,6 @@
} }
   
- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory { - (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory {
BOOL timedOut;
return [self fileExistsAtPath:path isDirectory:isDirectory timedOut:&timedOut];
}
- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory timedOut:(BOOL *)timedOut {
*timedOut = NO;
if ([_files containsObject:path]) { if ([_files containsObject:path]) {
if (isDirectory) { if (isDirectory) {
*isDirectory = NO; *isDirectory = NO;
Loading
@@ -65,8 +58,7 @@
Loading
@@ -65,8 +58,7 @@
} }
   
- (BOOL)fileExistsAtPathLocally:(NSString *)filename - (BOOL)fileExistsAtPathLocally:(NSString *)filename
additionalNetworkPaths:(NSArray<NSString *> *)additionalNetworkPaths additionalNetworkPaths:(NSArray<NSString *> *)additionalNetworkPaths {
timedOut:(BOOL *)timedOutPtr {
NSMutableArray *networkPaths = [[_networkMountPoints mutableCopy] autorelease]; NSMutableArray *networkPaths = [[_networkMountPoints mutableCopy] autorelease];
[networkPaths addObjectsFromArray:additionalNetworkPaths]; [networkPaths addObjectsFromArray:additionalNetworkPaths];
for (NSString *networkPath in networkPaths) { for (NSString *networkPath in networkPaths) {
Loading
@@ -79,8 +71,7 @@
Loading
@@ -79,8 +71,7 @@
} }
   
- (BOOL)fileExistsAtPath:(NSString *)path { - (BOOL)fileExistsAtPath:(NSString *)path {
BOOL timedOut; return [self fileExistsAtPath:path isDirectory:NULL];
return [self fileExistsAtPath:path isDirectory:NULL timedOut:&timedOut];
} }
   
@end @end
Loading
@@ -178,21 +169,17 @@
Loading
@@ -178,21 +169,17 @@
#pragma mark - Get Full Path #pragma mark - Get Full Path
   
- (void)testGetFullPathFailsOnNil { - (void)testGetFullPathFailsOnNil {
BOOL timedOut;
XCTAssert([_semanticHistoryController getFullPath:nil XCTAssert([_semanticHistoryController getFullPath:nil
workingDirectory:@"/" workingDirectory:@"/"
lineNumber:NULL lineNumber:NULL
columnNumber:NULL columnNumber:NULL] == nil);
timedOut:&timedOut] == nil);
} }
   
- (void)testGetFullPathFailsOnEmpty { - (void)testGetFullPathFailsOnEmpty {
BOOL timedOut;
XCTAssert([_semanticHistoryController getFullPath:@"" XCTAssert([_semanticHistoryController getFullPath:@""
workingDirectory:@"/" workingDirectory:@"/"
lineNumber:NULL lineNumber:NULL
columnNumber:NULL columnNumber:NULL] == nil);
timedOut:&timedOut] == nil);
} }
   
- (void)testGetFullPathFindsExistingFileAtAbsolutePath { - (void)testGetFullPathFindsExistingFileAtAbsolutePath {
Loading
@@ -201,12 +188,10 @@
Loading
@@ -201,12 +188,10 @@
static NSString *const kFilename = @"/path/to/file"; static NSString *const kFilename = @"/path/to/file";
static NSString *const kWorkingDirectory = @"/working/directory"; static NSString *const kWorkingDirectory = @"/working/directory";
[_semanticHistoryController.fakeFileManager.files addObject:kFilename]; [_semanticHistoryController.fakeFileManager.files addObject:kFilename];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kFilename NSString *actual = [_semanticHistoryController getFullPath:kFilename
workingDirectory:kWorkingDirectory workingDirectory:kWorkingDirectory
lineNumber:&lineNumber lineNumber:&lineNumber
columnNumber:&columnNumber columnNumber:&columnNumber];
timedOut:&timedOut];
NSString *expected = kFilename; NSString *expected = kFilename;
XCTAssert([expected isEqualToString:actual]); XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0); XCTAssert(lineNumber.length == 0);
Loading
@@ -220,12 +205,10 @@
Loading
@@ -220,12 +205,10 @@
NSString *kAbsoluteFilename = NSString *kAbsoluteFilename =
[kWorkingDirectory stringByAppendingPathComponent:kRelativeFilename]; [kWorkingDirectory stringByAppendingPathComponent:kRelativeFilename];
[_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename]; [_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kRelativeFilename NSString *actual = [_semanticHistoryController getFullPath:kRelativeFilename
workingDirectory:kWorkingDirectory workingDirectory:kWorkingDirectory
lineNumber:&lineNumber lineNumber:&lineNumber
columnNumber:&columnNumber columnNumber:&columnNumber];
timedOut:&timedOut];
NSString *expected = kAbsoluteFilename; NSString *expected = kAbsoluteFilename;
XCTAssert([expected isEqualToString:actual]); XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0); XCTAssert(lineNumber.length == 0);
Loading
@@ -239,12 +222,10 @@
Loading
@@ -239,12 +222,10 @@
NSString *kFilenameWithParens = [NSString stringWithFormat:@"%C%@%C", [delimiters characterAtIndex:0], kFilename, [delimiters characterAtIndex:1]]; NSString *kFilenameWithParens = [NSString stringWithFormat:@"%C%@%C", [delimiters characterAtIndex:0], kFilename, [delimiters characterAtIndex:1]];
static NSString *const kWorkingDirectory = @"/working/directory"; static NSString *const kWorkingDirectory = @"/working/directory";
[_semanticHistoryController.fakeFileManager.files addObject:kFilename]; [_semanticHistoryController.fakeFileManager.files addObject:kFilename];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kFilenameWithParens NSString *actual = [_semanticHistoryController getFullPath:kFilenameWithParens
workingDirectory:kWorkingDirectory workingDirectory:kWorkingDirectory
lineNumber:&lineNumber lineNumber:&lineNumber
columnNumber:&columnNumber columnNumber:&columnNumber];
timedOut:&timedOut];
NSString *expected = kFilename; NSString *expected = kFilename;
assert([expected isEqualToString:actual]); assert([expected isEqualToString:actual]);
assert(lineNumber.length == 0); assert(lineNumber.length == 0);
Loading
@@ -259,12 +240,10 @@
Loading
@@ -259,12 +240,10 @@
NSString *kFilenameWithParens = [kFilename stringByAppendingString:punctuation]; NSString *kFilenameWithParens = [kFilename stringByAppendingString:punctuation];
static NSString *const kWorkingDirectory = @"/working/directory"; static NSString *const kWorkingDirectory = @"/working/directory";
[_semanticHistoryController.fakeFileManager.files addObject:kFilename]; [_semanticHistoryController.fakeFileManager.files addObject:kFilename];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kFilenameWithParens NSString *actual = [_semanticHistoryController getFullPath:kFilenameWithParens
workingDirectory:kWorkingDirectory workingDirectory:kWorkingDirectory
lineNumber:&lineNumber lineNumber:&lineNumber
columnNumber:&columnNumber columnNumber:&columnNumber];
timedOut:&timedOut];
NSString *expected = kFilename; NSString *expected = kFilename;
XCTAssert([expected isEqualToString:actual]); XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0); XCTAssert(lineNumber.length == 0);
Loading
@@ -278,12 +257,10 @@
Loading
@@ -278,12 +257,10 @@
static NSString *const kWorkingDirectory = @"/working/directory"; static NSString *const kWorkingDirectory = @"/working/directory";
NSString *kFilenameWithLineNumber = [kFilename stringByAppendingString:@":123"]; NSString *kFilenameWithLineNumber = [kFilename stringByAppendingString:@":123"];
[_semanticHistoryController.fakeFileManager.files addObject:kFilename]; [_semanticHistoryController.fakeFileManager.files addObject:kFilename];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kFilenameWithLineNumber NSString *actual = [_semanticHistoryController getFullPath:kFilenameWithLineNumber
workingDirectory:kWorkingDirectory workingDirectory:kWorkingDirectory
lineNumber:&lineNumber lineNumber:&lineNumber
columnNumber:&columnNumber columnNumber:&columnNumber];
timedOut:&timedOut];
NSString *expected = kFilename; NSString *expected = kFilename;
XCTAssert([expected isEqualToString:actual]); XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.integerValue == 123); XCTAssert(lineNumber.integerValue == 123);
Loading
@@ -296,12 +273,10 @@
Loading
@@ -296,12 +273,10 @@
static NSString *const kWorkingDirectory = @"/working/directory"; static NSString *const kWorkingDirectory = @"/working/directory";
NSString *kFilenameWithLineNumber = [kFilename stringByAppendingString:@":123:456"]; NSString *kFilenameWithLineNumber = [kFilename stringByAppendingString:@":123:456"];
[_semanticHistoryController.fakeFileManager.files addObject:kFilename]; [_semanticHistoryController.fakeFileManager.files addObject:kFilename];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kFilenameWithLineNumber NSString *actual = [_semanticHistoryController getFullPath:kFilenameWithLineNumber
workingDirectory:kWorkingDirectory workingDirectory:kWorkingDirectory
lineNumber:&lineNumber lineNumber:&lineNumber
columnNumber:&columnNumber columnNumber:&columnNumber];
timedOut:&timedOut];
NSString *expected = kFilename; NSString *expected = kFilename;
XCTAssert([expected isEqualToString:actual]); XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.integerValue == 123); XCTAssert(lineNumber.integerValue == 123);
Loading
@@ -314,12 +289,10 @@
Loading
@@ -314,12 +289,10 @@
static NSString *const kWorkingDirectory = @"/working/directory"; static NSString *const kWorkingDirectory = @"/working/directory";
NSString *kFilenameWithLineNumber = [NSString stringWithFormat:@"(%@:123.)", kFilename]; NSString *kFilenameWithLineNumber = [NSString stringWithFormat:@"(%@:123.)", kFilename];
[_semanticHistoryController.fakeFileManager.files addObject:kFilename]; [_semanticHistoryController.fakeFileManager.files addObject:kFilename];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kFilenameWithLineNumber NSString *actual = [_semanticHistoryController getFullPath:kFilenameWithLineNumber
workingDirectory:kWorkingDirectory workingDirectory:kWorkingDirectory
lineNumber:&lineNumber lineNumber:&lineNumber
columnNumber:&columnNumber columnNumber:&columnNumber];
timedOut:&timedOut];
NSString *expected = kFilename; NSString *expected = kFilename;
XCTAssert([expected isEqualToString:actual]); XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.integerValue == 123); XCTAssert(lineNumber.integerValue == 123);
Loading
@@ -330,12 +303,10 @@
Loading
@@ -330,12 +303,10 @@
NSString *columnNumber = nil; NSString *columnNumber = nil;
static NSString *const kWorkingDirectory = @"/working/directory"; static NSString *const kWorkingDirectory = @"/working/directory";
static NSString *const kFilename = @"(:123.)"; static NSString *const kFilename = @"(:123.)";
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kFilename NSString *actual = [_semanticHistoryController getFullPath:kFilename
workingDirectory:kWorkingDirectory workingDirectory:kWorkingDirectory
lineNumber:&lineNumber lineNumber:&lineNumber
columnNumber:&columnNumber columnNumber:&columnNumber];
timedOut:&timedOut];
XCTAssert(actual == nil); XCTAssert(actual == nil);
} }
   
Loading
@@ -347,12 +318,10 @@
Loading
@@ -347,12 +318,10 @@
NSString *kAbsoluteFilename = @"/working/directory/path/to/file"; NSString *kAbsoluteFilename = @"/working/directory/path/to/file";
[_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename]; [_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename];
[_semanticHistoryController.fakeFileManager.files addObject:@"/working/directory/./path/to/file"]; [_semanticHistoryController.fakeFileManager.files addObject:@"/working/directory/./path/to/file"];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kRelativeFilename NSString *actual = [_semanticHistoryController getFullPath:kRelativeFilename
workingDirectory:kWorkingDirectory workingDirectory:kWorkingDirectory
lineNumber:&lineNumber lineNumber:&lineNumber
columnNumber:&columnNumber columnNumber:&columnNumber];
timedOut:&timedOut];
NSString *expected = kAbsoluteFilename; NSString *expected = kAbsoluteFilename;
XCTAssert([expected isEqualToString:actual]); XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0); XCTAssert(lineNumber.length == 0);
Loading
@@ -366,12 +335,10 @@
Loading
@@ -366,12 +335,10 @@
NSString *kAbsoluteFilename = @"/working/directory/path/to/file"; NSString *kAbsoluteFilename = @"/working/directory/path/to/file";
[_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename]; [_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename];
[_semanticHistoryController.fakeFileManager.files addObject:@"/working/directory/blah/../path/to/file"]; [_semanticHistoryController.fakeFileManager.files addObject:@"/working/directory/blah/../path/to/file"];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kRelativeFilename NSString *actual = [_semanticHistoryController getFullPath:kRelativeFilename
workingDirectory:kWorkingDirectory workingDirectory:kWorkingDirectory
lineNumber:&lineNumber lineNumber:&lineNumber
columnNumber:&columnNumber columnNumber:&columnNumber];
timedOut:&timedOut];
NSString *expected = kAbsoluteFilename; NSString *expected = kAbsoluteFilename;
XCTAssert([expected isEqualToString:actual]); XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0); XCTAssert(lineNumber.length == 0);
Loading
@@ -385,12 +352,10 @@
Loading
@@ -385,12 +352,10 @@
NSString *kAbsoluteFilename = NSString *kAbsoluteFilename =
[kWorkingDirectory stringByAppendingPathComponent:kRelativeFilename]; [kWorkingDirectory stringByAppendingPathComponent:kRelativeFilename];
[_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename]; [_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:[@"a/" stringByAppendingString:kRelativeFilename] NSString *actual = [_semanticHistoryController getFullPath:[@"a/" stringByAppendingString:kRelativeFilename]
workingDirectory:kWorkingDirectory workingDirectory:kWorkingDirectory
lineNumber:&lineNumber lineNumber:&lineNumber
columnNumber:&columnNumber columnNumber:&columnNumber];
timedOut:&timedOut];
NSString *expected = kAbsoluteFilename; NSString *expected = kAbsoluteFilename;
XCTAssert([expected isEqualToString:actual]); XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0); XCTAssert(lineNumber.length == 0);
Loading
@@ -404,12 +369,10 @@
Loading
@@ -404,12 +369,10 @@
NSString *kAbsoluteFilename = NSString *kAbsoluteFilename =
[kWorkingDirectory stringByAppendingPathComponent:kRelativeFilename]; [kWorkingDirectory stringByAppendingPathComponent:kRelativeFilename];
[_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename]; [_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:[@"b/" stringByAppendingString:kRelativeFilename] NSString *actual = [_semanticHistoryController getFullPath:[@"b/" stringByAppendingString:kRelativeFilename]
workingDirectory:kWorkingDirectory workingDirectory:kWorkingDirectory
lineNumber:&lineNumber lineNumber:&lineNumber
columnNumber:&columnNumber columnNumber:&columnNumber];
timedOut:&timedOut];
NSString *expected = kAbsoluteFilename; NSString *expected = kAbsoluteFilename;
XCTAssert([expected isEqualToString:actual]); XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0); XCTAssert(lineNumber.length == 0);
Loading
@@ -423,12 +386,10 @@
Loading
@@ -423,12 +386,10 @@
NSString *kAbsoluteFilename = NSString *kAbsoluteFilename =
[kWorkingDirectory stringByAppendingPathComponent:kRelativeFilename]; [kWorkingDirectory stringByAppendingPathComponent:kRelativeFilename];
[_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename]; [_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kRelativeFilename NSString *actual = [_semanticHistoryController getFullPath:kRelativeFilename
workingDirectory:kWorkingDirectory workingDirectory:kWorkingDirectory
lineNumber:&lineNumber lineNumber:&lineNumber
columnNumber:&columnNumber columnNumber:&columnNumber];
timedOut:&timedOut];
NSString *expected = kAbsoluteFilename; NSString *expected = kAbsoluteFilename;
XCTAssert([expected isEqualToString:actual]); XCTAssert([expected isEqualToString:actual]);
   
Loading
@@ -436,8 +397,7 @@
Loading
@@ -436,8 +397,7 @@
actual = [_semanticHistoryController getFullPath:kRelativeFilename actual = [_semanticHistoryController getFullPath:kRelativeFilename
workingDirectory:kWorkingDirectory workingDirectory:kWorkingDirectory
lineNumber:&lineNumber lineNumber:&lineNumber
columnNumber:&columnNumber columnNumber:&columnNumber];
timedOut:&timedOut];
XCTAssert(actual == nil); XCTAssert(actual == nil);
} }
   
Loading
Loading
Loading
@@ -37,8 +37,7 @@
Loading
@@ -37,8 +37,7 @@
   
// Returns YES if the file exists on a local (non-network) filesystem. // Returns YES if the file exists on a local (non-network) filesystem.
- (BOOL)fileExistsAtPathLocally:(NSString *)filename - (BOOL)fileExistsAtPathLocally:(NSString *)filename
additionalNetworkPaths:(NSArray<NSString *> *)additionalNetworkpaths additionalNetworkPaths:(NSArray<NSString *> *)additionalNetworkpaths;
timedOut:(BOOL *)timedOut;
   
- (BOOL)fileHasForbiddenPrefix:(NSString *)filename - (BOOL)fileHasForbiddenPrefix:(NSString *)filename
additionalNetworkPaths:(NSArray<NSString *> *)additionalNetworkpaths; additionalNetworkPaths:(NSArray<NSString *> *)additionalNetworkpaths;
Loading
Loading
Loading
@@ -25,7 +25,6 @@
Loading
@@ -25,7 +25,6 @@
#import "NSFileManager+iTerm.h" #import "NSFileManager+iTerm.h"
   
#import "iTermAdvancedSettingsModel.h" #import "iTermAdvancedSettingsModel.h"
#import "iTermCallWithTimeout.h"
#import "DebugLogging.h" #import "DebugLogging.h"
#import "iTermAdvancedSettingsModel.h" #import "iTermAdvancedSettingsModel.h"
#import "iTermAutoMasterParser.h" #import "iTermAutoMasterParser.h"
Loading
@@ -228,32 +227,20 @@ NSString * const DirectoryLocationDomain = @"DirectoryLocationDomain";
Loading
@@ -228,32 +227,20 @@ NSString * const DirectoryLocationDomain = @"DirectoryLocationDomain";
} }
   
- (BOOL)fileExistsAtPathLocally:(NSString *)filename - (BOOL)fileExistsAtPathLocally:(NSString *)filename
additionalNetworkPaths:(NSArray<NSString *> *)additionalNetworkPaths additionalNetworkPaths:(NSArray<NSString *> *)additionalNetworkPaths {
timedOut:(BOOL *)timedOutPtr {
if ([self fileHasForbiddenPrefix:filename additionalNetworkPaths:additionalNetworkPaths]) { if ([self fileHasForbiddenPrefix:filename additionalNetworkPaths:additionalNetworkPaths]) {
return NO; return NO;
} }
   
__block BOOL ok = NO; BOOL ok;
[filename retain]; struct statfs buf;
BOOL timedOut = int rc = statfs([filename UTF8String], &buf);
[[iTermCallWithTimeout instanceForIdentifier:@"statfs"] executeWithTimeout:0.5 block:^{ if (rc != 0 || (buf.f_flags & MNT_LOCAL)) {
struct statfs buf; ok = [self fileExistsAtPath:filename];
int rc = statfs([filename UTF8String], &buf); } else {
if (rc != 0 || (buf.f_flags & MNT_LOCAL)) { ok = NO;
ok = [self fileExistsAtPath:filename];
} else {
ok = NO;
}
[filename release];
}];
if (timedOutPtr) {
*timedOutPtr = timedOut;
} }
if (timedOut) { return ok;
DLog(@"Timed out doing statfs on %@", filename);
}
return timedOut ? NO : ok;
} }
   
@end @end
Loading
Loading
//
// iTermCallWithTimeout.h
// iTerm2SharedARC
//
// Created by George Nachman on 10/7/17.
//
#import <Foundation/Foundation.h>
@interface iTermCallWithTimeout : NSObject
+ (instancetype)instanceForIdentifier:(NSString *)identifier;
- (BOOL)executeWithTimeout:(NSTimeInterval)timeout
block:(void (^)(void))block;
@end
//
// iTermCallWithTimeout.m
// iTerm2SharedARC
//
// Created by George Nachman on 10/7/17.
//
#import "iTermCallWithTimeout.h"
@implementation iTermCallWithTimeout {
dispatch_queue_t _queue;
}
+ (instancetype)instanceForIdentifier:(NSString *)identifier {
static NSMutableDictionary *objects;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
objects = [NSMutableDictionary dictionary];
});
iTermCallWithTimeout *object = objects[identifier];
if (object == nil) {
object = [[self alloc] initWithIdentifier:identifier];
objects[identifier] = object;
}
return object;
}
- (instancetype)initWithIdentifier:(NSString *)identifier {
self = [super init];
if (self) {
_queue = dispatch_queue_create([[NSString stringWithFormat:@"com.iterm2.timeoutcall.%@", identifier] UTF8String],
NULL);
}
return self;
}
- (BOOL)executeWithTimeout:(NSTimeInterval)timeout block:(void (^)(void))block {
dispatch_group_t group = dispatch_group_create();
dispatch_group_enter(group);
dispatch_async(_queue, ^{
block();
dispatch_group_leave(group);
});
// Wait up to half a second for the statfs to finish.
long timedOut = dispatch_group_wait(group,
dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeout * NSEC_PER_SEC)));
return !!timedOut;
}
@end
Loading
@@ -8,7 +8,6 @@
Loading
@@ -8,7 +8,6 @@
   
#import "iTermLSOF.h" #import "iTermLSOF.h"
   
#import "iTermCallWithTimeout.h"
#import "iTermSocketAddress.h" #import "iTermSocketAddress.h"
#import "ProcessCache.h" #import "ProcessCache.h"
#include <arpa/inet.h> #include <arpa/inet.h>
Loading
@@ -19,11 +18,7 @@
Loading
@@ -19,11 +18,7 @@
#include <sys/sysctl.h> #include <sys/sysctl.h>
   
int iTermProcPidInfoWrapper(int pid, int flavor, uint64_t arg, void *buffer, int buffersize) { int iTermProcPidInfoWrapper(int pid, int flavor, uint64_t arg, void *buffer, int buffersize) {
__block int result; return proc_pidinfo(pid, flavor, arg, buffer, buffersize);
BOOL timeout = [[iTermCallWithTimeout instanceForIdentifier:@"pidinfo"] executeWithTimeout:0.5 block:^{
result = proc_pidinfo(pid, flavor, arg, buffer, buffersize);
}];
return timeout ? -1 : result;
} }
   
@implementation iTermLSOF { @implementation iTermLSOF {
Loading
Loading
Loading
@@ -48,8 +48,7 @@ extern NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey;
Loading
@@ -48,8 +48,7 @@ extern NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey;
- (NSString *)getFullPath:(NSString *)path - (NSString *)getFullPath:(NSString *)path
workingDirectory:(NSString *)workingDirectory workingDirectory:(NSString *)workingDirectory
lineNumber:(NSString **)lineNumber lineNumber:(NSString **)lineNumber
columnNumber:(NSString **)columnNumber columnNumber:(NSString **)columnNumber;
timedOut:(BOOL *)timedOut;
   
// Opens the file at the relative |path| (which may include :lineNumber) in |workingDirectory|. // Opens the file at the relative |path| (which may include :lineNumber) in |workingDirectory|.
// The |substitutions| dictionary is used to expand \references in the command to run (gotten from // The |substitutions| dictionary is used to expand \references in the command to run (gotten from
Loading
Loading
Loading
@@ -43,10 +43,9 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
Loading
@@ -43,10 +43,9 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
@synthesize prefs = prefs_; @synthesize prefs = prefs_;
@synthesize delegate = delegate_; @synthesize delegate = delegate_;
   
- (BOOL)fileExistsAtPathLocally:(NSString *)path timedOut:(BOOL *)timedOut { - (BOOL)fileExistsAtPathLocally:(NSString *)path {
return [self.fileManager fileExistsAtPathLocally:path return [self.fileManager fileExistsAtPathLocally:path
additionalNetworkPaths:[[iTermAdvancedSettingsModel pathsToIgnore] componentsSeparatedByString:@","] additionalNetworkPaths:[[iTermAdvancedSettingsModel pathsToIgnore] componentsSeparatedByString:@","]];
timedOut:timedOut];
} }
   
- (BOOL)fileHasForbiddenPrefix:(NSString *)path { - (BOOL)fileHasForbiddenPrefix:(NSString *)path {
Loading
@@ -57,10 +56,8 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
Loading
@@ -57,10 +56,8 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
- (NSString *)getFullPath:(NSString *)path - (NSString *)getFullPath:(NSString *)path
workingDirectory:(NSString *)workingDirectory workingDirectory:(NSString *)workingDirectory
lineNumber:(NSString **)lineNumber lineNumber:(NSString **)lineNumber
columnNumber:(NSString **)columnNumber columnNumber:(NSString **)columnNumber {
timedOut:(BOOL *)timedOut {
DLog(@"Check if %@ is a valid path in %@", path, workingDirectory); DLog(@"Check if %@ is a valid path in %@", path, workingDirectory);
*timedOut = NO;
NSString *origPath = path; NSString *origPath = path;
// TODO(chendo): Move regex, define capture semantics in config file/prefs // TODO(chendo): Move regex, define capture semantics in config file/prefs
if (!path || [path length] == 0) { if (!path || [path length] == 0) {
Loading
@@ -107,7 +104,7 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
Loading
@@ -107,7 +104,7 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
// be stat()ed, although they were always stat()ed because of unintentional // be stat()ed, although they were always stat()ed because of unintentional
// disk access in the old code. // disk access in the old code.
   
if ([self fileExistsAtPathLocally:path timedOut:timedOut]) { if ([self fileExistsAtPathLocally:path]) {
DLog(@" YES: A file exists at %@", path); DLog(@" YES: A file exists at %@", path);
NSURL *url = [NSURL fileURLWithPath:path]; NSURL *url = [NSURL fileURLWithPath:path];
   
Loading
@@ -120,11 +117,7 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
Loading
@@ -120,11 +117,7 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
return nil; return nil;
} }
return path; return path;
} else if (*timedOut) {
DLog(@" NO: timed out");
return nil;
} }
// If path doesn't exist and it starts with "a/" or "b/" (from `diff`). // If path doesn't exist and it starts with "a/" or "b/" (from `diff`).
if ([origPath isMatchedByRegex:@"^[ab]/"]) { if ([origPath isMatchedByRegex:@"^[ab]/"]) {
DLog(@" Treating as diff path"); DLog(@" Treating as diff path");
Loading
@@ -136,8 +129,7 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
Loading
@@ -136,8 +129,7 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
return [self getFullPath:origPath return [self getFullPath:origPath
workingDirectory:workingDirectory workingDirectory:workingDirectory
lineNumber:lineNumber lineNumber:lineNumber
columnNumber:columnNumber columnNumber:columnNumber];
timedOut:timedOut];
} }
   
DLog(@" NO: no valid path found"); DLog(@" NO: no valid path found");
Loading
@@ -338,11 +330,9 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
Loading
@@ -338,11 +330,9 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
   
BOOL isRawAction = [prefs_[kSemanticHistoryActionKey] isEqualToString:kSemanticHistoryRawCommandAction]; BOOL isRawAction = [prefs_[kSemanticHistoryActionKey] isEqualToString:kSemanticHistoryRawCommandAction];
if (!isRawAction) { if (!isRawAction) {
BOOL timedOut;
path = [self getFullPath:path workingDirectory:workingDirectory path = [self getFullPath:path workingDirectory:workingDirectory
lineNumber:&lineNumber lineNumber:&lineNumber
columnNumber:&columnNumber columnNumber:&columnNumber];
timedOut:&timedOut];
DLog(@"Not a raw action. New path is %@, line number is %@", path, lineNumber); DLog(@"Not a raw action. New path is %@, line number is %@", path, lineNumber);
} }
   
Loading
@@ -455,8 +445,7 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
Loading
@@ -455,8 +445,7 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
charsTakenFromPrefix:(int *)charsTakenFromPrefixPtr charsTakenFromPrefix:(int *)charsTakenFromPrefixPtr
charsTakenFromSuffix:(int *)suffixChars charsTakenFromSuffix:(int *)suffixChars
trimWhitespace:(BOOL)trimWhitespace { trimWhitespace:(BOOL)trimWhitespace {
BOOL timedOut; BOOL workingDirectoryIsOk = [self fileExistsAtPathLocally:workingDirectory];
BOOL workingDirectoryIsOk = [self fileExistsAtPathLocally:workingDirectory timedOut:&timedOut];
if (!workingDirectoryIsOk) { if (!workingDirectoryIsOk) {
DLog(@"Working directory %@ is a network share or doesn't exist. Not using it for context.", DLog(@"Working directory %@ is a network share or doesn't exist. Not using it for context.",
workingDirectory); workingDirectory);
Loading
@@ -519,16 +508,10 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
Loading
@@ -519,16 +508,10 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
for (NSString *modifiedPossiblePath in [self pathsFromPath:trimmedPath byRemovingBadSuffixes:questionableSuffixes]) { for (NSString *modifiedPossiblePath in [self pathsFromPath:trimmedPath byRemovingBadSuffixes:questionableSuffixes]) {
BOOL exists = NO; BOOL exists = NO;
if (workingDirectoryIsOk || [modifiedPossiblePath hasPrefix:@"/"]) { if (workingDirectoryIsOk || [modifiedPossiblePath hasPrefix:@"/"]) {
BOOL timedOut = NO;
exists = ([self getFullPath:modifiedPossiblePath exists = ([self getFullPath:modifiedPossiblePath
workingDirectory:workingDirectory workingDirectory:workingDirectory
lineNumber:NULL lineNumber:NULL
columnNumber:NULL columnNumber:NULL] != nil);
timedOut:&timedOut] != nil);
if (timedOut) {
DLog(@"Timed out checking path %@ in %@", modifiedPossiblePath, workingDirectory);
return nil;
}
} }
if (exists) { if (exists) {
if (charsTakenFromPrefixPtr) { if (charsTakenFromPrefixPtr) {
Loading
Loading
Loading
@@ -196,12 +196,10 @@
Loading
@@ -196,12 +196,10 @@
range.columnWindow = extractor.logicalWindow; range.columnWindow = extractor.logicalWindow;
action.range = range; action.range = range;
   
BOOL timedOut;
action.fullPath = [semanticHistoryController getFullPath:filename action.fullPath = [semanticHistoryController getFullPath:filename
workingDirectory:workingDirectory workingDirectory:workingDirectory
lineNumber:NULL lineNumber:NULL
columnNumber:NULL columnNumber:NULL];
timedOut:&timedOut];
action.workingDirectory = workingDirectory; action.workingDirectory = workingDirectory;
return action; return action;
} }
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment