Для тестирования я использую Alcon, который через localconnection ловит специальные трейсы и показывает в удобном окошечке.
Но сегодня утром словил такую странную фигню -- при каком-то обращении через localconnection мой уютный mac входит в странное состояние, в котором любой другой localconnection в любом месте на любой странице вешает нафиг любой браузер и даже standalone player. Лечится только перезагрузкой(!) мака....
Потребовалось какое-то время, чтобы локализовать проблему. И это делает именно какой-то вызов Debug.trace(), который в свою очередь через localconnection общается с Alcon'ом. При чем не понятно какой, т.к. проблема проявляется не сразу.
Что изменилось с ночи -- я добавил компонентик, который грузит сторонний swf и содержимое которого я не знаю, без этого компонентика, вроде бы проблем не наблюдается. А с ним либо сразу, либо через раз тестирования.
При чем с этой загружаемой флэшкой работало раньше другое приложение нормально. Вопрос уже даже не в том ломает ли все именно эта флэшка, а в том, каким, блин, образом? Такое ощущение, что что-то как-то забивает "общую трубу" локалконекшена так, что любая другая попытка туда пролезть не дожидается результата и браузер целиком висит. Даже это письмо я пишу из Simple HTML View, потому что, видать, флэшки для заливания аттачей в нормальном View тоже используют localconnection и все виснет.
Гугление нашло только одну страничку со следующим коментарием.
"I am running into the same problems you are describing. We are only using 2 local connections on our pages and Local Connect will crash Mac Firefox so bad you will have to restart your system just to be able to use your browser again. Has anyone found, seen any fixes for this?" http://www.joshdura.com/2005/09/01/odd-localconnectionmac-bug/
я совсем недавно писал вещатель через LC и основной проблемой было то, что плеер наказывал падением за ошибки. Но у меня была проблема не в LC, а в SO и проблема возникала при попытке создания двух so в одном потоке. Может это натолкнет на мысль.
> Уточни, плз. Во флеше байткод (пока) всегда выполняется в одном потоке > (имея ввиду threads).
- в данном случае речь не о threads, разумеется, а о коннектах swf-ки к flash плееру. Там несинхронные потоки, которые запросто друг с другом конфликтуют. Или не потоки, но конфликтуют. Если тебе интересно о чем речь, могу дать класс LocalConnectionEventDispatcher и сказать что сделать, чтобы ошибка вылезла.
Может оффтоп, но модная фишка! Eсли создать два LC с одинаковыми именами то происходит ошибка, которую можно отловить (try ... except), при этом принудительно вызывается сборщик мусора. Что полезно, к примеру, после выгрузки Loader'ом модулей... Эдайкий хак GC %)
> Eсли создать два LC с одинаковыми именами то происходит ошибка, которую > можно отловить (try ... except), при этом принудительно вызывается > сборщик мусора. Что полезно, к примеру, после выгрузки Loader'ом > модулей... Эдайкий хак GC %)
- да, но только в дебаг плеере, насколько мне известно. Но это наталкивает на мысль в свете толго, что писал выше Валентин.
Basically, we use LocalConnections to communicate between AS2 and AS3. If someone is debugging in Flex Debugger and exits the player in the middle of the debug session, the debugger does not close the LocalConnections properly. After this, no more LocalConnections can be opened until the user restarts their computer.
Никуда я не exits the player in the middle of, оно просто виснет. Но все равно весело.