On Thu, 2006-01-19 at 17:17 +1300, Simon Kitching wrote:
> On Wed, 2006-01-18 at 22:18 +0000, robert burrell donkin wrote:
> > on the subject of thread safety, there is a potential issue with
> > Log4JLogger - take a look at getLogger(). i'd like a second opinion (and
> > a third and a forth, if possible) so i'll post this now before i analyse
> > it.
> > 
> > (see
> > http://mail-archives.apache.org/mod_mbox/jakarta-commons-user/200511.mbox/[EMAIL
> >  PROTECTED])
> > 
> 
> I don't think this is valid. Yes there is a race condition but it's
> harmless.

<snip>

> NB: the synchronized keyword also ensures that CPU caches are correctly
> synchronized. However even taking this into account I can't see a
> situation where anything bad can happen.

i was wondering whether a logger could be partially constructed and if
so what the likely effect would be (thread A enters getLogger() and
starts the construction of the logger but is not finished before thread
B enters the method and finds logger has been assigned (so not null) but
not completed constructed.) i'm unsure whether this scenario is allowed
by the java language and virtual machine specifications. a few similarly
unintuitive ones are.

finding out the answer would probably require spending a good few hours
analysing the specifications. i'm not sure that this is a priority for
me right now (since i suspect that this would have been reported had it
been a practical scenario). any volunteers?

if this is a real problem then it could be fixed by assigning to a
temporary variable:

    public Logger getLogger() {
        Logger logger = this.logger;
        if (logger == null) {
            logger = Logger.getLogger(name);
        }
        this.logger = logger;
        return (this.logger);
    }

but it's probably best to err on the side of inertia if we aren't sure
that the issue is real...

- robert


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to