1

ヘルプ!特定のホスト名のアドレスを取得しようとすると、クラッシュが発生しました。クラッシュ ログは次のように表示されます。

1 libobjc.A.dylib 0x0000000197d180e4 objc_exception_throw + 56

2 CoreFoundation 0x0000000186044218 -[NSException initWithCoder:]

3 Foundation 0x0000000186e9528c -[NSThread 開始] + 136

4 ZFirewall7.dylib 0x0000000105e4d768 -[FiPSettingsManager doHostStuff:] + 1124

5 ZFirewall7.dylib 0x0000000105e48424 _ZL23my_CFHostCreateWithNamePPK13__CFAllocatorPPK10__CFString + 164

6 アップロード 0x000000010220d1c0 +[UploadUtil addressesForHostname:] (UploadUtil.m:277)

7 アップロード 0x000000010220d120 +[UploadUtil addressForHostname:] (UploadUtil.m:267)

....

*** -[NSThread start]: スレッドの再起動を試みます

私のコードは次のとおりです。

+(NSArray *)addressesForHostname:(NSString *)hostname
{

    // Get the addresses for the given hostname.
    CFHostRef hostRef = CFHostCreateWithName(kCFAllocatorDefault, (__bridge CFStringRef)hostname);

    BOOL isSuccess = CFHostStartInfoResolution(hostRef, kCFHostAddresses, nil);
    if (!isSuccess)
    {
        CFRelease(hostRef);
        return nil;
    }
    CFArrayRef addressesRef = CFHostGetAddressing(hostRef, nil);
    if (addressesRef == nil)
    {
        CFRelease(hostRef);
        return nil;
    }
    // Convert these addresses into strings.
    char ipAddress[INET6_ADDRSTRLEN];
    NSMutableArray *addresses = [NSMutableArray array];
    CFIndex numAddresses = CFArrayGetCount(addressesRef);

    for (CFIndex currentIndex = 0; currentIndex < numAddresses; currentIndex++) {
        struct sockaddr *address = (struct sockaddr *)CFDataGetBytePtr(CFArrayGetValueAtIndex(addressesRef, currentIndex));
        if (address == nil)
        {
            CFRelease(hostRef);
            return nil;
        }
        getnameinfo(address, address->sa_len, ipAddress, INET6_ADDRSTRLEN, nil, 0, NI_NUMERICHOST);
        [addresses addObject:[NSString stringWithCString:ipAddress encoding:NSASCIIStringEncoding]];
    }
    CFRelease(hostRef);
    return addresses;
    }

この関数は複数のスレッドによって呼び出され、CFHostCreateWithName のドキュメントにはスレッドセーフであると書かれていますが、この問題を解決する方法がわかりません。

ヘルプ!

4

0 に答える 0