Tcl Source Code

Artifact [6183532f3e]
Login

Artifact 6183532f3e2e19116a12f43e2049f9d35204d6d8:

Ticket change [6183532f3e] - Ticket [578155d5a1] Very rare bug (segfault) if set variable (with error case) using self-releasable object as new value status still Open with 3 other changes by sebres 2017-07-12 20:04:15.
D 2017-07-12T20:04:15.019
J icomment Although\sthe\semphasis\swas\s"only\sonce"\sreferenced,\sbut\sit\sis\snot\salways\sthe\scase:\sthe\sobject\snewValue\scan\sbe\sreferenced\stwice\sor\smore\s(newValue->refCount\s>\s1)\sand\sdescribed\ssituation\scan\snevertheless\sstill\soccur,\sif\swe've\ssomething\slike\sthis:\r\n<code><pre>\r\nset\sX\s[list\s[list\s1st-list\s$newValue]\s[list\s2nd-list\s$newValue]\s...]\r\ncall-something-that-set-var\s::missing::namespace::var\s[call-something-unset-X-and-return-its-value\sX]\r\n</pre></code>\r\nI\sthink\sthis\sexample\sdescribes\sthe\sissue\svery\sgood.\r\n\r\nThus\smy\sproposal\sto\ssolve\sit\s(resp.\sto\sworkaround\sit)\susing:\r\n<pre><code>\r\n<b\sstyle="color:green">+\s\s\s\s\sint\sfreeNewVal\s=\s(newValuePtr->refCount\s==\s0);</b>\r\n\r\n\s\s\s\s\spart1\s=\sTclGetString(part1Ptr);\r\n\s\s\s\s\spart2\s=\s((part2Ptr\s==\sNULL)\s?\sNULL\s:\sTclGetString(part2Ptr));\r\n\s\s\r\n\s\s\s\s\svarPtr\s=\sTclObjLookupVar(interp,\spart1Ptr,\spart2,\sflags,\s"set",\r\n\s\s\s\s\s\s\s\s\s\s\s\s/*createPart1*/\s1,\s/*createPart2*/\s1,\s&arrayPtr);\r\n\s\s\s\s\sif\s(varPtr\s==\sNULL)\s{\r\n<b\sstyle="color:red">-\s\s\s\s\s\s\s\sif\s(newValuePtr->refCount\s==\s0)\s{</b>\r\n<b\sstyle="color:green">+\s\s\s\s\s\s\s\sif\s(freeNewVal)\s{</b>\r\n\s\s\s\s\s\s\s\s\s\s\s\s\sTcl_DecrRefCount(newValuePtr);\r\n\s\s\s\s\s\s\s\s\s}\r\n\s\s\s\s\s\s\s\s\sreturn\sNULL;\r\n\s\s\s\s\s}\r\n</code></pre>
J login sebres
J mimetype text/x-fossil-wiki
K 578155d5a19b348dc1a9fe96cc2c067a59326a89
U sebres
Z a5e409b6e00c574f261aca0176106eda