Good job figuring that out! I think it still means that multiple calls to initExterns could be launched, so maybe someday we need to put in official thread management, but I think it is good enough for now.
-Alex On 10/22/15, 3:12 PM, "Josh Tynjala" <joshtynj...@gmail.com> wrote: >Problem solved. I discovered that isExternal() could be called before >initExterns() returned. The externs member variable would be non-null, but >not all of the values had been added yet. I changed initExterns() so that >it would add the values a local variable instead, and I waited to set the >externs member variable until the end, when all values were guaranteed to >be added. > >- Josh > >On Thu, Oct 22, 2015 at 2:39 PM, Josh Tynjala <joshtynj...@gmail.com> >wrote: > >> I tried overriding setTargetSettings(), and that kept the LinkageChecker >> from being created more than once. However, that did not fix the issue. >>The >> isExternal() method on the LinkageChecker is still sometimes incorrectly >> returning false. I guess that was just a coincidence. >> >> I'll keep investigating because this is happening pretty frequently for >> me. I used to have builds sometimes mysteriously fail on me before, and >>I >> now think it was from this same issue, but it was less frequent then. >> >> - Josh >> >> On Wed, Oct 21, 2015 at 6:03 PM, Alex Harui <aha...@adobe.com> wrote: >> >>> >>> >>> On 10/21/15, 5:35 PM, "Alex Harui" <aha...@adobe.com> wrote: >>> >>> > >>> > >>> >On 10/21/15, 4:20 PM, "Josh Tynjala" <joshtynj...@gmail.com> wrote: >>> > >>> >>Is the compiler using more than one thread? Could different threads >>>be >>> >>calling isExternalLinkage(), and am I seeing a race condition? >>> > >>> >The compiler uses one thread for each .as file so yes, you are >>>probably >>> >seeing a multi-thread issue, although I haven’t checked the call stack >>> >into that call to see if it is coming from threads. >>> >>> So I took a quick look and yes, that code gets called from within the >>> threads. I don’t immediately see any reason you would get a different >>> answer even if there was a race condition. But you might try >>>overriding >>> setTargetSettings and creating the linkageChecker as soon as the >>> targetSettings are available and see if that helps. >>> >>> -Alex >>> >>> >>