workers threads end ejemplos ios html5 websocket web-worker sigsegv

ios - threads - EXC_BAD_ACCESS(SIGSEGV) en WebCore:: UserGestureIndicator:: processingUserGesture



web workers html5 ejemplos (1)

Tengo una aplicación iOS construida con un websockets UIWebView y HTML5. La aplicación experimenta choques aparentemente aleatorios. Ocurrió mientras un usuario interactúa con él y durante las pruebas de longevidad en las que no se produce interacción entre el usuario y la aplicación.

Todos los registros de bloqueo tienen lo siguiente:

Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Subtype: KERN_INVALID_ADDRESS at 0x00000000

y los registros de hilo contienen:

Thread XX name: WebCore: Worker Thread XX Crashed: 0 WebCore 0x36c8c7a0 WebCore::UserGestureIndicator::processingUserGesture() + 20 1 WebCore 0x36d7070a WebCore::DOMTimer::DOMTimer(WebCore::ScriptExecutionContext*, WTF::PassOwnPtr<WebCore::ScheduledAction>, int, bool) + 74 2 WebCore 0x36d70616 WebCore::DOMTimer::install(WebCore::ScriptExecutionContext*, WTF::PassOwnPtr<WebCore::ScheduledAction>, int, bool) + 46 3 WebCore 0x3753ae7e WebCore::WorkerContext::setTimeout(WTF::PassOwnPtr<WebCore::ScheduledAction>, int) + 30 4 WebCore 0x3731ac02 WebCore::JSWorkerContext::setTimeout(JSC::ExecState*) + 194 5 WebCore 0x37318ff6 WebCore::jsWorkerContextPrototypeFunctionSetTimeout(JSC::ExecState*) + 110 6 JavaScriptCore 0x2fa9a1d8 llint_native_call_trampoline + 62 7 JavaScriptCore 0x2faa355a JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) + 66 8 WebCore 0x36db0b16 WebCore::JSEventListener::handleEvent(WebCore::ScriptExecutionContext*, WebCore::Event*) + 558 9 WebCore 0x36d6ebba WebCore::EventTarget::fireEventListeners(WebCore::Event*, WebCore::EventTargetData*, WTF::Vector<WebCore::RegisteredEventListener, 1ul, WTF::CrashOnOverflow>&) + 482 10 WebCore 0x36c6da2a WebCore::EventTarget::fireEventListeners(WebCore::Event*) + 174 11 WebCore 0x36e28824 WebCore::EventTarget::dispatchEvent(WTF::PassRefPtr<WebCore::Event>) + 60 12 WebCore 0x3753e596 WebCore::MessageWorkerContextTask::performTask(WebCore::ScriptExecutionContext*) + 222 13 WebCore 0x3753ec6e WebCore::WorkerRunLoop::runInMode(WebCore::WorkerContext*, WebCore::ModePredicate const&, WebCore::WorkerRunLoop::WaitMode) + 158 14 WebCore 0x3753eb94 WebCore::WorkerRunLoop::run(WebCore::WorkerContext*) + 60 15 WebCore 0x37540d64 WebCore::WorkerThread::workerThread() + 432 16 JavaScriptCore 0x2fa4ba68 WTF::wtfThreadEntryPoint(void*) + 12 17 libsystem_pthread.dylib 0x397b6c5a _pthread_body + 138 18 libsystem_pthread.dylib 0x397b6bca _pthread_start + 98 19 libsystem_pthread.dylib 0x397b4ccc thread_start + 4

Me las arreglé para detectar la excepción en el lanzamiento, y por lo que puedo decir, parece ser un error de marco. Ver captura de pantalla adjunta.

La mayoría de lo que he leído parece indicar que la vista web se está desasignando antes de que se despida un delegado, ¡pero en ninguna parte de mi código reparto!

¿Alguien ha encontrado este o un caso similar? ¡Cualquier ayuda es muy apreciada!

ACTUALIZAR

He presentado un informe de error con Apple después de contactar con el soporte para desarrolladores. Sus ingenieros confirmaron que esto era un error.


En mi caso, tengo un problema similar.

Como muchos de ellos dijeron, puede deberse a que los métodos de WebView Delegate están llamando mientras se está desasignando webview.

Para solucionarlo, debemos establecer el delegado como nulo y también detener la solicitud de vista de web en métodos específicos

Tienes que añadir las siguientes líneas de código

-(void)viewDidUnload{ [super viewDidUnload]; webViewRef.delegate = nil; [webViewRef stopLoading]; } -(void)backBtnClicked{ webViewRef.delegate = nil; [webViewRef stopLoading]; }

Espero que te ayude.