Index: generic/nsf.c =================================================================== diff -u -N -r496f49d15463c79323454495e356de52137b46bd -r55715c476a861bb380e2cf5e7e31c056311d157a --- generic/nsf.c (.../nsf.c) (revision 496f49d15463c79323454495e356de52137b46bd) +++ generic/nsf.c (.../nsf.c) (revision 55715c476a861bb380e2cf5e7e31c056311d157a) @@ -15596,10 +15596,24 @@ } } else { /* - * Configure failed, therefore, the object might be in an undefined - * state. To avoid strange errors, we delete the half-baked object. + * Configure failed and might have left the object in a bogus state. To + * avoid strange errors, we delete the half-baked object. */ + + Tcl_Obj *errObj; + + /* + * Preserve the outer error message, calls triggered by + * DispatchDestroyMethod() can cause the interp result to be reset + */ + + errObj = Tcl_GetObjResult(interp); + INCR_REF_COUNT(errObj); + DispatchDestroyMethod(interp, (NsfObject *)object, 0); + + Tcl_SetObjResult(interp, errObj); + DECR_REF_COUNT(errObj); } NsfCleanupObject(object, "obj init");