Index: TODO =================================================================== diff -u -r5e70792b640c7d8b9a7235ba529dbfc0af2b84ad -r5fa7f2e825f97323378a15442605543055ce2655 --- TODO (.../TODO) (revision 5e70792b640c7d8b9a7235ba529dbfc0af2b84ad) +++ TODO (.../TODO) (revision 5fa7f2e825f97323378a15442605543055ce2655) @@ -1240,6 +1240,8 @@ - report "invalid parameter" in nsf::is and parametercheck, even when no-complain is used. +- fixed reference counting problem with user-defined converters + TODO: - reflect changes in /is/objectproperty/info has/info is/ in migration guide - implement built-in-converter for "baseclass" and "metaclass"? Index: generic/xotcl.c =================================================================== diff -u -rf20a7f81bcae20a40c4990afd431615ca1914c51 -r5fa7f2e825f97323378a15442605543055ce2655 --- generic/xotcl.c (.../xotcl.c) (revision f20a7f81bcae20a40c4990afd431615ca1914c51) +++ generic/xotcl.c (.../xotcl.c) (revision 5fa7f2e825f97323378a15442605543055ce2655) @@ -5171,8 +5171,13 @@ * messages and trace information. */ { int overflow, limit = 60, nameLen; - const char *procName = Tcl_GetStringFromObj(procNameObj, &nameLen); + const char *procName; + /*fprintf(stderr, "MakeProcError zzzz %p type %p refCount %d\n", + procNameObj, procNameObj->typePtr, procNameObj->refCount);*/ + + procName = Tcl_GetStringFromObj(procNameObj, &nameLen); + /*fprintf(stderr, ".... procName = %s\n", procName);*/ overflow = (nameLen > limit); Tcl_AppendObjToErrorInfo(interp, Tcl_ObjPrintf( "\n (procedure \"%.*s%s\" line %d)", @@ -6522,8 +6527,13 @@ ov[4] = pPtr->converterArg; oc++; } - + + INCR_REF_COUNT(ov[1]); + INCR_REF_COUNT(ov[2]); result = Tcl_EvalObjv(interp, oc, ov, 0); + DECR_REF_COUNT(ov[1]); + DECR_REF_COUNT(ov[2]); + if (result == TCL_OK) { /*fprintf(stderr, "convertViaCmd converts %s to '%s' paramPtr %p\n", ObjStr(objPtr), ObjStr(Tcl_GetObjResult(interp)),pPtr);*/