This problem with plugins loaded from the plugindefines.txt has been causing 
issues for me too, mainly when pybel sporadically complains that the list of 
descriptors is garbage.

I've tried tracking it down, without much success. It seems to be a problem 
with all plugins that are loaded from a file using OBDefine in loader.cpp, not 
just the SMARTS descriptors. (Also, the SMARTS descriptors loaded manually at 
the end of smartsdescriptors.cpp look fine to me.)

I think the problem is to do with plugins using const char* pointers for the 
ID, description etc. These pointers are created from std::strings using 
.c_str() in MakeInstance, and I think maybe the original string is being 
destroyed or going out of scope, hence the char* pointer becomes garbage. The 
only problem is, as far as I can tell, loader.cpp looks after the strings just 
fine so they shouldn't be destroyed.

In loader.cpp, OBDefine reads the relevant strings from plugindefines.txt, then 
copies them into a private member vector _text, to ensure they stay around for 
the lifetime of the OBDefine instance. The strings in _text are then used to 
call MakeInstance on SmartsDescriptor, PatternFP, CompoundFilter, etc. which 
uses c_str() to create a pointer to the string in memory. Right after the 
descriptors are created, accessing GetID() returns it fine. But at some later 
point this becomes garbage, even when the OBDefine instance is still around and 
the strings in OBDefine's _text are still completely fine.

If the original string hasn't been destroyed, one other thing that could 
invalidate the c_str() result is if a non-const member function of the string 
is called. I can't see this happening anywhere either though.

Matt

On 2 Jan 2014, at 21:32, Geoffrey Hutchison <geoff.hutchi...@gmail.com> wrote:

>> Can you figure out a minimal plugindefines.txt that still causes the problem?
> 
> Good point. I'm now seeing that the main issue is with SMARTS descriptors. 
> I'll see if I can find the problems later tonight.
> 
> Thanks,
> -Geoff
> ------------------------------------------------------------------------------
> Rapidly troubleshoot problems before they affect your business. Most IT 
> organizations don't have a clear picture of how application performance 
> affects their revenue. With AppDynamics, you get 100% visibility into your 
> Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
> http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
> _______________________________________________
> OpenBabel-discuss mailing list
> OpenBabel-discuss@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/openbabel-discuss


------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today. 
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
OpenBabel-discuss mailing list
OpenBabel-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openbabel-discuss

Reply via email to