[ 
https://issues.apache.org/jira/browse/CB-11355?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Darryl Pogue resolved CB-11355.
-------------------------------
    Resolution: Fixed

> initPlugins() abuse borking plugins on (ajax) loads, and potential fix
> ----------------------------------------------------------------------
>
>                 Key: CB-11355
>                 URL: https://issues.apache.org/jira/browse/CB-11355
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: cordova-lib, cordova-ubuntu (DEPRECATED)
>         Environment: Ubuntu 15.10
> $ cordova -v
> 6.1.1
> $ nodejs -v
> v6.2.0
>            Reporter: Pat Deegan
>            Assignee: David Barth
>            Priority: Major
>              Labels: easyfix, plugins, segfault, triaged, ubuntu
>
> I'm working on an (ubuntu) plugin that is thread-safe but was causing 
> segfaults everytime I'd (asynch) load a new page or component.
> Trying to run it under gdb, I found that as long as I avoided moving around 
> there were no issues, but every load of a new page or (html) popup would 
> spawn a new thread and somehow re-init my plugin (which is stateful and needs 
> to stay alive).
> The traces looked like so:
> ======================== snip ========================
> [New Thread 0x7fffcf8a9700 (LWP 26618)]
> Debug: Enable plugin "com.example.MyPlugin"
> Debug: Enable plugin "File"
> Debug: Enable plugin "Notification"
> Debug: Enable plugin "com.cordova.Device"
> Debug: Testing "/path/to/project/platforms/ubuntu/native/prefix/www/logo.png"
> [Thread 0x7fffcf8a9700 (LWP 26618) exited]
> Debug: Testing 
> "/path/to/project/platforms/ubuntu/native/prefix/www/cordova.js"
> Debug: Testing 
> "/path/to/project/platforms/ubuntu/native/prefix/www/cordova_plugins.js"
> Debug: Testing 
> "/path/to/project/platforms/ubuntu/native/prefix/www/pageA.html"
> Debug: Testing 
> "/path/to/project/platforms/ubuntu/native/prefix/www/pageB.html"
> Debug: Testing 
> "/path/to/project/platforms/ubuntu/native/prefix/www/index.html"
> Debug: Testing 
> "/path/to/project/platforms/ubuntu/native/prefix/www/libcoreplugins.so"
> [New Thread 0x7fffcf8a9700 (LWP 26619)]
> [Thread 0x7fffcf8a9700 (LWP 26619) exited]
> Debug: Enable plugin "com.example.MyPlugin"
> Debug: Enable plugin "File"
> Debug: Enable plugin "Notification"
> Debug: Enable plugin "com.cordova.Device"
> Debug: Testing "/path/to/project/platforms/ubuntu/native/prefix/www/logo.png"
> Debug: Testing 
> "/path/to/project/platforms/ubuntu/native/prefix/www/cordova.js"
> Debug: Testing 
> "/path/to/project/platforms/ubuntu/native/prefix/www/cordova_plugins.js"
> Debug: Testing 
> "/path/to/project/platforms/ubuntu/native/prefix/www/pageA.html"
> Debug: Testing 
> "/path/to/project/platforms/ubuntu/native/prefix/www/pageB.html"
> Debug: Testing 
> "/path/to/project/platforms/ubuntu/native/prefix/www/index.html"
> Debug: Testing 
> "/path/to/project/platforms/ubuntu/native/prefix/www/libcoreplugins.so"
> [New Thread 0x7fffcf8a9700 (LWP 26621)]
> Debug: Enable plugin "com.example.MyPlugin"
> Debug: Enable plugin "File"
> Debug: Enable plugin "Notification"
> Debug: Enable plugin "com.cordova.Device"
> Debug: Testing "/path/to/project/platforms/ubuntu/native/prefix/www/logo.png"
> [Thread 0x7fffcf8a9700 (LWP 26621) exited]
> Program received signal SIGSEGV, Segmentation fault.
> ======================== /snip ========================
> I tracked down the reason for all the (redundant?) "Enable plugin" events to 
> initPlugins() calls in loadFinished() (in the Ubuntu package/src/cordova.cpp):
> void Cordova::loadFinished(bool ok) {
>     Q_UNUSED(ok)
>     initPlugins();
> }
> I'm not certain what the purpose of this call is, as the init already happens 
> in Cordova::appLoaded().
> In any case, I've disabled the call and loadFinished() and my plugin is both 
> persistent and has stopped causing segfaults.
> Is there a reason to keep this initPlugins() call in loadFinished()?  If so, 
> could we add some kind of 
>    virtual bool loadOnlyOnce() { return false;}
> to the CPlugin base class so we can check for and skip plugins that override 
> it?  Or is there some other technique I'm not aware of?
> Thanks,
> Pat Deegan



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org
For additional commands, e-mail: issues-h...@cordova.apache.org

Reply via email to