groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jochen Theodorou <blackd...@gmx.org>
Subject Re: Groovy category throwing MissingMethodException and MissingPropertyException when using multiple threads
Date Fri, 30 Oct 2015 09:13:37 GMT
You can also attach a patch to the issue, if you want to.

On 30.10.2015 04:41, Suderman Keith wrote:
> Hi Jochen,
>
> I am not positive this is the cause of the problem here, but it sets off alarm bells
in my head.  Consider lines 75 and 76:
>
>             atomicCategoryUsageCounter.incrementAndGet();
>             categoriesInUse = atomicCategoryUsageCounter.get();
>
> Line 75 does an incrementAndGet() but ignores the result.  The value is then obtained
again on the next line with another call to get() leaving a tiny window for another thread
to increment/decrement the counter.  That is what I meant by “non-atomic usage”. This
should be:
>
>             categoriesInUse = atomicCategoryUsageCounter.incrementAndGet();
>
> The same thing happens in the endScope() method (lines 99-100); the code calls getAndDecrement(),
ignores the result, and then calls the get() method again on the next line, leaving another
tiny window for another thread to change the value.
>
> I haven’t had a chance to figure out why Groovy won’t build on my system so I can’t
submit a PR for this.
>
> Cheers,
> Keith
>
>
>> On Oct 29, 2015, at 3:52 PM, Jochen Theodorou <blackdrag@gmx.org> wrote:
>>
>> On 29.10.2015 11:48, Suderman Keith wrote:
>>> There are (at least) two race conditions in GroovyCategorySupport.java
>>> that would explain the intermittent and hard to reproduce bugs.
>>>
>>> I was hoping to submit this as my first official pull request to the
>>> Groovy project, but gradle has different ideas…
>>>
>>> However, the offending code is in on lines 75-76 and 99-100 where
>>> atomicCategoryUsageCounter is used non-atomically. If no one beats me to
>>> it I will submit a PR once I puzzle out why ./gradlew test is failing
>>> for me.
>>
>> Can you explain the non-atomic usage and why it leads to a problem here?
>>
>> bye blackdrag
>


Mime
View raw message