diff options
author | mdejong <mdejong> | 2003-07-22 00:59:57 (GMT) |
---|---|---|
committer | mdejong <mdejong> | 2003-07-22 00:59:57 (GMT) |
commit | ce198068acc4ff17e7c6d6b2ab4278ee933ec117 (patch) | |
tree | d3afea75fc0d6fc2565a51ce9f8b3e99ce8d3dc6 /ChangeLog | |
parent | 2fef44444804c9b45a356ef18edc4254a7805b6f (diff) | |
download | tcl-ce198068acc4ff17e7c6d6b2ab4278ee933ec117.zip tcl-ce198068acc4ff17e7c6d6b2ab4278ee933ec117.tar.gz tcl-ce198068acc4ff17e7c6d6b2ab4278ee933ec117.tar.bz2 |
Check that the thread incrementing or decrementing
the ref count of a Tcl_Obj is the thread that
originally allocated the thread. This fail fast
behavior will catch programming errors that
allow a single Tcl_Obj to be accessed from multiple
threads.
* generic/tcl.h (Tcl_Obj): Add allocThread member
to Tcl_Obj. This member records the thread id the
Tcl_Obj was allocated. It is used to check that
any future ref count incr or decr is done from
the same thread that allocated the Tcl_Obj.
This member is defined only when threads and
mem debug are enabled.
* generic/tclInt.h (TclNewObj, TclDbNewObj,
TclDecrRefCount):
Define TclNewObj and TclDbNewObj using TclDbInitNewObj
when mem debug is enabled. This fixes a problem where
TclNewObj calls did not work the same as TclDbNewObj
when mem debug was enabled.
* generic/tclObj.c (TclDbInitNewObj, Tcl_DbIncrRefCount,
Tcl_DbDecrRefCount): Add new helper to init Tcl_Obj
members when mem debug is enabled. Init the allocThread
member in TclDbInitNewObj and check it in
Tcl_DbIncrRefCount and Tcl_DbDecrRefCount to make sure
a Tcl_Obj allocated in one thread is not being acted
upon in another thread.
Diffstat (limited to 'ChangeLog')
-rw-r--r-- | ChangeLog | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -1,3 +1,33 @@ +2003-07-21 Mo DeJong <mdejong@users.sourceforge.net> + + Check that the thread incrementing or decrementing + the ref count of a Tcl_Obj is the thread that + originally allocated the thread. This fail fast + behavior will catch programming errors that + allow a single Tcl_Obj to be accessed from multiple + threads. + + * generic/tcl.h (Tcl_Obj): Add allocThread member + to Tcl_Obj. This member records the thread id the + Tcl_Obj was allocated. It is used to check that + any future ref count incr or decr is done from + the same thread that allocated the Tcl_Obj. + This member is defined only when threads and + mem debug are enabled. + * generic/tclInt.h (TclNewObj, TclDbNewObj, + TclDecrRefCount): + Define TclNewObj and TclDbNewObj using TclDbInitNewObj + when mem debug is enabled. This fixes a problem where + TclNewObj calls did not work the same as TclDbNewObj + when mem debug was enabled. + * generic/tclObj.c (TclDbInitNewObj, Tcl_DbIncrRefCount, + Tcl_DbDecrRefCount): Add new helper to init Tcl_Obj + members when mem debug is enabled. Init the allocThread + member in TclDbInitNewObj and check it in + Tcl_DbIncrRefCount and Tcl_DbDecrRefCount to make sure + a Tcl_Obj allocated in one thread is not being acted + upon in another thread. + 2003-07-21 Vince Darley <vincentdarley@users.sourceforge.net> * test/cmdAH.test: ensure certain tests run in local filesystem |