From 132a90a8657c18c56e1339f055c8386e0e06e76b Mon Sep 17 00:00:00 2001 From: Diego Waxemberg Date: Thu, 8 Jan 2015 17:04:16 -0500 Subject: [PATCH] fixed possible concurrent modification bug --- Limelight/Crypto/CryptoManager.m | 34 ++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/Limelight/Crypto/CryptoManager.m b/Limelight/Crypto/CryptoManager.m index 853072c..722938d 100644 --- a/Limelight/Crypto/CryptoManager.m +++ b/Limelight/Crypto/CryptoManager.m @@ -202,21 +202,25 @@ static NSData* p12 = nil; } + (void) generateKeyPairUsingSSl { - if (![CryptoManager keyPairExists]) { - - NSLog(@"Generating Certificate... "); - CertKeyPair certKeyPair = generateCertKeyPair(); - - NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); - NSString* documentsDirectory = [paths objectAtIndex:0]; - NSString* certFile = [documentsDirectory stringByAppendingPathComponent:@"client.crt"]; - NSString* keyPairFile = [documentsDirectory stringByAppendingPathComponent:@"client.key"]; - NSString* p12File = [documentsDirectory stringByAppendingPathComponent:@"client.p12"]; - - //NSLog(@"Writing cert and key to: \n%@\n%@", certFile, keyPairFile); - saveCertKeyPair([certFile UTF8String], [p12File UTF8String], [keyPairFile UTF8String], certKeyPair); - freeCertKeyPair(certKeyPair); - } + static dispatch_once_t pred; + dispatch_once(&pred, ^{ + if (![CryptoManager keyPairExists]) { + + NSLog(@"Generating Certificate... "); + CertKeyPair certKeyPair = generateCertKeyPair(); + + NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); + NSString* documentsDirectory = [paths objectAtIndex:0]; + NSString* certFile = [documentsDirectory stringByAppendingPathComponent:@"client.crt"]; + NSString* keyPairFile = [documentsDirectory stringByAppendingPathComponent:@"client.key"]; + NSString* p12File = [documentsDirectory stringByAppendingPathComponent:@"client.p12"]; + + //NSLog(@"Writing cert and key to: \n%@\n%@", certFile, keyPairFile); + saveCertKeyPair([certFile UTF8String], [p12File UTF8String], [keyPairFile UTF8String], certKeyPair); + freeCertKeyPair(certKeyPair); + NSLog(@"Certificate created"); + } + }); } + (NSString*) getUniqueID {