New submission from Armin Ronacher <armin.ronac...@active-4.com>:

I found a a useless lock acquiring in the 27 maintenance branch in logging and 
a missing one as well:

Logger.removeHandler() locks around a handler lock, however the code executed 
in this lock is not depending on anything of that lock.  However there is a 
race condition when two pieces of code try to remove the same handler at the 
same time because between the if and the remove() no locking takes place.

I would recommend this instead (and also add locking to the addHandler):

    def addHandler(self, hdlr):
        """
        Add the specified handler to this logger.
        """
        _acquireLock()
        try:
            if hdlr not in self.handlers:
                self.handlers.append(hdlr)
        finally:
            _releaseLock()

    def removeHandler(self, hdlr):
        """
        Remove the specified handler from this logger.
        """
        _acquireLock()
        try:
            if hdlr in self.handlers:
                self.handlers.remove(hdlr)
        finally:
            _releaseLock()

I suppose in 3.x there might be something similar.

----------
assignee: vinay.sajip
components: Library (Lib)
messages: 117364
nosy: aronacher, vinay.sajip
priority: normal
severity: normal
status: open
title: Improper locking in logging
type: behavior
versions: Python 2.7

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue9945>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to