From 7bfb07a25ae567609e25dbbbbafa9f616c313e5a Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 1 Mar 2013 10:39:06 -0800 Subject: [PATCH] Lock on shared NSSpellChecker and use release pool Closes #335 --- native/v8_extensions/native.mm | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/native/v8_extensions/native.mm b/native/v8_extensions/native.mm index 77b924635..b5a7e3449 100644 --- a/native/v8_extensions/native.mm +++ b/native/v8_extensions/native.mm @@ -524,24 +524,33 @@ namespace v8_extensions { else if (name == "isMisspelled") { NSString *word = stringFromCefV8Value(arguments[0]); - NSRange range = [[NSSpellChecker sharedSpellChecker] checkSpellingOfString:word startingAt:0]; - retval = CefV8Value::CreateBool(range.length > 0); + NSSpellChecker *spellChecker = [NSSpellChecker sharedSpellChecker]; + @synchronized(spellChecker) { + @autoreleasepool { + NSRange range = [spellChecker checkSpellingOfString:word startingAt:0]; + retval = CefV8Value::CreateBool(range.length > 0); + } + } return true; } else if (name == "getCorrectionsForMisspelling") { NSString *misspelling = stringFromCefV8Value(arguments[0]); - NSSpellChecker *spellchecker = [NSSpellChecker sharedSpellChecker]; - NSString *language = [spellchecker language]; - NSRange range; - range.location = 0; - range.length = [misspelling length]; - NSArray *guesses = [spellchecker guessesForWordRange:range inString:misspelling language:language inSpellDocumentWithTag:0]; - CefRefPtr v8Guesses = CefV8Value::CreateArray([guesses count]); - for (int i = 0; i < [guesses count]; i++) { - v8Guesses->SetValue(i, CefV8Value::CreateString([[guesses objectAtIndex:i] UTF8String])); + NSSpellChecker *spellChecker = [NSSpellChecker sharedSpellChecker]; + @synchronized(spellChecker) { + @autoreleasepool { + NSString *language = [spellChecker language]; + NSRange range; + range.location = 0; + range.length = [misspelling length]; + NSArray *guesses = [spellChecker guessesForWordRange:range inString:misspelling language:language inSpellDocumentWithTag:0]; + CefRefPtr v8Guesses = CefV8Value::CreateArray([guesses count]); + for (int i = 0; i < [guesses count]; i++) { + v8Guesses->SetValue(i, CefV8Value::CreateString([[guesses objectAtIndex:i] UTF8String])); + } + retval = v8Guesses; + } } - retval = v8Guesses; return true; }