Thread: [SQL-CVS] r3382 - in SQLObject/trunk: docs sqlobject
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: <sub...@co...> - 2008-04-14 14:39:19
|
Author: phd Date: 2008-04-14 08:38:46 -0600 (Mon, 14 Apr 2008) New Revision: 3382 Modified: SQLObject/trunk/docs/News.txt SQLObject/trunk/sqlobject/declarative.py Log: Reverted the patch N 1407684 (declarative.threadSafeMethod()) - it causes more harm then good. Modified: SQLObject/trunk/docs/News.txt =================================================================== --- SQLObject/trunk/docs/News.txt 2008-04-14 14:37:53 UTC (rev 3381) +++ SQLObject/trunk/docs/News.txt 2008-04-14 14:38:46 UTC (rev 3382) @@ -110,6 +110,9 @@ * A minor bug was fixed in col.py - the registry must be passed to findClass(). +* Reverted the patch declarative.threadSafeMethod() - it causes more harm + then good. + SQLObject 0.9.5 =============== @@ -468,9 +471,6 @@ * Fixed a bug with default field values for columns for Firebird connection. -* Prevent a deadlock in declarative.threadSafeMethod() by not reacquiring - the class lock. - * Fixed a bug in col.createSQL(). * Fixed a bug in converting date/time for years < 1000 (time.strptime() Modified: SQLObject/trunk/sqlobject/declarative.py =================================================================== --- SQLObject/trunk/sqlobject/declarative.py 2008-04-14 14:37:53 UTC (rev 3381) +++ SQLObject/trunk/sqlobject/declarative.py 2008-04-14 14:38:46 UTC (rev 3382) @@ -32,16 +32,15 @@ or an instance method depending on where it is called. """ -import threading +import copy import events -__all__ = ('classinstancemethod', 'DeclarativeMeta', 'Declarative') - -import copy - import itertools counter = itertools.count() +__all__ = ('classinstancemethod', 'DeclarativeMeta', 'Declarative') + + class classinstancemethod(object): """ Acts like a class method when called from a class, like an @@ -77,25 +76,6 @@ return ('<bound method %s.%s of %r>' % (self.type.__name__, self.func.func_name, self.obj)) -def threadSafeMethod(lock): - def decorator(fn): - def _wrapper(self, *args, **kwargs): - # This prevents deadlocks. - # The class lock isn't really needed in __init__() while fetching. - if '_SO_fetch_no_create' in kwargs: - return fn(self, *args, **kwargs) - lock.acquire() - try: - return fn(self, *args, **kwargs) - finally: - lock.release() - try: - _wrapper.func_name = fn.func_name - except TypeError: - pass - return _wrapper - return decorator - class DeclarativeMeta(type): def __new__(meta, class_name, bases, new_attrs): @@ -110,9 +90,6 @@ if new_attrs.has_key('__classinit__'): cls.__classinit__ = staticmethod(cls.__classinit__.im_func) cls.__classinit__(cls, new_attrs) - if new_attrs.has_key('__init__'): - lock = threading.RLock() - cls.__init__ = threadSafeMethod(lock)(cls.__init__) for func in post_funcs: func(cls) return cls |