groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Keith Suderman <>
Subject Re: Groovy category throwing MissingMethodException and MissingPropertyException when using multiple threads
Date Fri, 30 Oct 2015 03:43:33 GMT
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:

          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.


> On Oct 29, 2015, at 3:52 PM, Jochen Theodorou <> wrote:
> On 29.10.2015 11:48, Suderman Keith wrote:
>> There are (at least) two race conditions in
>> 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

Research Associate
Department of Computer Science
Vassar College
Poughkeepsie, NY

View raw message