Tcl Source Code

Artifact [b39e14ba53]
Login

Artifact b39e14ba53d51672a6b8eb0391b99f3826f74106:

Ticket change [b39e14ba53] - 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-17 16:59:39.
D 2017-07-17T16:59:39.879
J icomment Well,\sthis\sseems\sto\shave\srepercussions\s-\stoday\sI\swould\scheck\smy\sidea\swith\snew\sflag\s<code>TCL_OWN_OBJREF</code>\sand\shave\sverified\sat\swhich\splaces\severywhere\sin\stcl\s(and\ssome\smodules\slike\sthread,\setc)\sit\smay\sbe\sneeded.\r\nThereby\sI\sfound\smany\splaces,\swhere\sit's\scurrently\swrong\s(e.\sg.\susage\sof\sreleased\sobject,\swrong\sfree\sor\seven\sleaks).<br/>\r\nToo\smany\sto\slist\sall\sthis\shere...<br/>\r\nJust\sas\san\sexample,\ssee\s<a\shref="https://core.tcl.tk/tcl/artifact/396c145dddedc7d0?ln=2750">Tcl_ObjSetVar2(...,\smatchVarObj,\sNULL,\semptyObj,\s...)</a>\sthat\swill\suse\salready\sreleased\sobject\s<code>emptyObj</code>\sif\s10\slines\s<a\shref="https://core.tcl.tk/tcl/artifact/396c145dddedc7d0?ln=2740">above</a>\sthe\ssame\sobject\s<code>emptyObj</code>\swill\sbe\sreleased\sin\strace\sby\s<code>Tcl_ObjSetVar2(...,\sindexVarObj,\sNULL,\semptyObj,\s...)\s</code>.\r\nNote\sthat\sin\scurrent\sversions\sthis\sdoes\snot\shave\s<code>Tcl_DecrRefCount(emptyObj)</code>\sin\serror\scases\s(since\sauto-release\sin\s[510663a99e3a096bb7bab7314eb59fc805335318]),\sbut\sit\sdoes\sno\smatter\sbecause\sthis\scan\sbe\sreleased\sin\strace\sby\sset.\r\n\r\nI\swould\slike\sto\sfix\sall\ssuch\serrors\s(and\ssimilar)\sfor\s8.5th,\s8.6th\sand\strunk\sbranches\s(together\swith\sintroducing\sof\salready\ssuggested\snew\sflag\sTCL_OWN_OBJREF\sor\susing\ssome\sother\ssolution\slike\snew\sinternal\sfunction\s<code>TclObjOwnAndSetVar</code>),\sbut\sfirstly\sI\swould\slike\sto\sknow\swhat\sTCT\sthinks\sabout\s(new\sflag?,\snew\sfunction?,\ssomething\sother?).\r\nIMHO\sbut\s(very-very\scontroversial)\sauto-release\smade\sin\s[510663a99e3a096bb7bab7314eb59fc805335318]\sis\snot\sreally\sa\ssolution\sand\sshould\sbe\srewritten.\r\n\r\nPlease\snote\salso,\sthat\sthis\sbehavior\sis\sundocumented,\sso\smany\speople\smake\sstill:\r\n<code><pre>\r\nTcl_Obj\s*newObj\s=\sSomethingReturnsNewObjOfTypeX(...);\r\nif\s(Tcl_ObjSetVar2(...,\svarObj,\sNULL,\snewObj,\s...)\s==\sNULL)\s{\r\n\s\sTcl_DecrRefCount(newObj);\r\n\s\sreturn\sTCL_ERROR;\r\n}\r\n</pre></code>\r\nWhat\sis\scurrently\swrong\s(because\ssince\s[510663a99e3a096bb7bab7314eb59fc805335318]\sit\sis\sdouble\sdecreased,\sand\scan\scause\ssegfault).
J login sebres
J mimetype text/x-fossil-wiki
K 578155d5a19b348dc1a9fe96cc2c067a59326a89
U sebres
Z 26634078d602a7d91aad84abe48eec3c