...googling through the mailing list, I see that David Lonie mentions
that OBErrorLog has problems, and Tim that all formats are singletons.
I need to think some more about this latter.

- Noel

On 12 February 2017 at 16:45, Noel O'Boyle <baoille...@gmail.com> wrote:
> Classes or variables with a global instance are susceptible to
> multithreading problems. It turns out that these are listed in the
> Python bindings.
>
> Classes: OBElementTable, OBTypeTable, OBIsotopeTable, OBAromaticTyper,
> OBAtomTyper, OBChainsParser, OBResidueData, OBPhModel, OBErrorLog
> Variables: Residue, ElemDesc, ResNo, ElemNo (these all from the bottom
> of residue.h)
>
> The following don't appear to be a problem:
> OBElementTable, OBTypeTable, OBIsotopeTable
>
> On my branch (https://github.com/baoilleach/openbabel/tree/fixglobalstate)
> I think I've fixed the following:
> OBAromaticTyper, OBAtomTyper, OBPhModel
>
> Roger didn't anticipate multi-processor architectures and it looks
> like OBChainsParser and OBResidueData as well as those variables
> listed above do have a problem. It should be possible to fix, but
> perceiving residues (or reading PDB and also I guess MOL2) will cause
> problems right now.
>
> I haven't really looked at OBErrorLog, and my time is up right now.
> Have I missed any classes that you know of?
>
> David, do you have any test code that reads an SDF multithreadedly,
> that could be used to force segfaults?
>
> Regards,
> - Noel
>
> On 11 February 2017 at 21:08, Noel O'Boyle <baoille...@gmail.com> wrote:
>> Here's of what I was thinking:
>> https://github.com/baoilleach/openbabel/commit/697b92180f9f61f738ef3e5c04d30340b9f8ee8e
>>
>> If it looks okay, I can make a similar change to other classes that
>> have the same problem (assuming one size fits all).
>>
>> - Noel
>>
>>
>> On 8 February 2017 at 09:32, Noel O'Boyle <baoille...@gmail.com> wrote:
>>> There's no memory overhead on the molecule class - it's unchanged. Let
>>> me make the change on a branch for one of the classes, and we can chew
>>> it over.
>>>
>>> - Noel
>>>
>>> On 7 February 2017 at 13:35, Koes, David <dk...@pitt.edu> wrote:
>>>> I think this is most definitely the way to go if you can tolerate the API 
>>>> changes.  The main drawback is potentially each molecule class taking up 
>>>> more memory.  I would welcome any changes that push openbabel closer to 
>>>> thread safety..
>>>>
>>>> David Koes
>>>>
>>>> Assistant Professor
>>>> Computational & Systems Biology
>>>> University of Pittsburgh
>>>>
>>>>
>>>>> On Feb 7, 2017, at 5:20 AM, Noel O'Boyle <baoille...@gmail.com> wrote:
>>>>>
>>>>> Hi there,
>>>>>
>>>>> Wouldn't a better solution to the race conditions that David Koes is
>>>>> experiencing with global state be to remove the global state? For the
>>>>> cases he mentioned, e.g. the OBAromTyper, the global state relating to
>>>>> a single molecule can easily be moved to a OBAromTyperPrivate class
>>>>> instantiated by a TypeThisMolecule() function in the global class.
>>>>>
>>>>> This is an API breakage, but only because these internal
>>>>> implementation functions were exposed. I think the time might be ripe
>>>>> for a couple of API cleanups, not for the sake of it, but where they
>>>>> limit or affect the toolkit's usage.
>>>>>
>>>>> Regards,
>>>>> - Noel
>>>>

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
OpenBabel-Devel mailing list
OpenBabel-Devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openbabel-devel

Reply via email to