Thread: [SQL-CVS] r1546 - SQLObject/trunk/sqlobject
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: <sub...@co...> - 2006-01-30 18:29:14
|
Author: phd Date: 2006-01-30 11:28:18 -0700 (Mon, 30 Jan 2006) New Revision: 1546 Modified: SQLObject/trunk/sqlobject/declarative.py Log: Applied the patch 1407684: object initialization threading issue. Modified: SQLObject/trunk/sqlobject/declarative.py =================================================================== --- SQLObject/trunk/sqlobject/declarative.py 2006-01-28 20:10:43 UTC (rev 1545) +++ SQLObject/trunk/sqlobject/declarative.py 2006-01-30 18:28:18 UTC (rev 1546) @@ -33,6 +33,7 @@ """ from __future__ import generators +import threading import events __all__ = ('classinstancemethod', 'DeclarativeMeta', 'Declarative') @@ -85,6 +86,19 @@ 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): + lock.acquire() + return_value = fn(self, *args, **kwargs) + lock.release() + return return_value + try: + _wrapper.func_name = fn.func_name + except TypeError: + pass + return _wrapper + return decorator class DeclarativeMeta(type): @@ -100,6 +114,9 @@ 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 |
From: Ian B. <ia...@co...> - 2006-01-30 18:47:52
|
sub...@co... wrote: > Author: phd > Date: 2006-01-30 11:28:18 -0700 (Mon, 30 Jan 2006) > New Revision: 1546 > > Modified: > SQLObject/trunk/sqlobject/declarative.py > Log: > Applied the patch 1407684: object initialization threading issue. I didn't realize this was also an SF patch (I came upon it on the TurboGears tracker). I believe the last commit that sets .sqlmeta fixed this bug, while the locking merely covers up the bug. -- Ian Bicking / ia...@co... / http://blog.ianbicking.org |