I think you should give it a go. Some more tests too perhaps?

Gary

On Mon, Apr 6, 2015 at 7:02 PM, Remko Popma <remko.po...@gmail.com> wrote:

> ...and of course, setConfiguration(URI newLocation) should call
> reconfigure(newLocation) with the specified parameter, instead of the
> public reconfigure() method.
>
>
> On Tuesday, April 7, 2015, Remko Popma <remko.po...@gmail.com> wrote:
>
>> Looking at the patch I submitted for LOG4J2-207, this is where the
>> synchronized methods getConfigLocation and setConfigLocation were added.
>> The patch also made the configLocation field mutable (it was final before).
>>
>> I think my reasoning for making them synchronized was that setting the
>> configLocation field and the subsequent call to reconfigure() should be
>> atomic.
>>
>> I agree that there may be better ways of doing this. One idea:
>> 1. Make configLocation volatile as Ralph suggested
>> 2. Remove synchronized keyword from getConfigLocation and
>> setConfigLocation
>> 3. Add a new private method reconfigure(URI configLocation). This does
>> all the work of the current reconfigure() method, but uses the specified
>> configLocation method parameter instead of the field.
>> 4. Modify the public synchronized method reconfigure() to delegate to the
>> private method with the configLocation field value. (So this method becomes
>> a one-liner.)
>>
>> This is a cleaner way to preserve the atomicity of the setConfiguration
>> method without any additional locks.
>>
>> Thoughts?
>>
>> Sent from my iPhone
>>
>> > On 2015/04/07, at 1:02, Ralph Goers <ralph.go...@dslextreme.com> wrote:
>> >
>> > I’ve been looking at the deadlock that is documented in LOG4J-982.  It
>> seems to me that the problem is that get/setConfigLocation and reconfigure
>> are locking the whole LoggerContext.  First, the history shows that I added
>> get & setConfigLocation as part of LOG4J2-207. I think Remko actually wrote
>> the code.  I am not sure why these methods need to be synchronized.
>> Wouldn’t it be enough for configLocation to be volatile?
>> >
>> > Second, I don’t think locking the LoggerContext for the entirety a
>> reconfigure is a good idea. reconfigure calls setConfiguration, which is
>> also synchronized. It seems to me that while setConfiguration does need to
>> be locked, it should be using a lock that specifically only prevents
>> setConfiguration from being executed simultaneously from more than one
>> thread.
>> >
>> > Thoughts?
>> >
>> > Ralph
>> > ---------------------------------------------------------------------
>> > To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org
>> > For additional commands, e-mail: log4j-dev-h...@logging.apache.org
>> >
>>
>


-- 
E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
Java Persistence with Hibernate, Second Edition
<http://www.manning.com/bauer3/>
JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
Spring Batch in Action <http://www.manning.com/templier/>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Reply via email to