Thanks for your reply.
Before pasting the program i edited some part of it as the original program had few lines of commented code to enable memory command.
Did you get the truss command output of the sample program ?
Of course with this code i could not see the hang,It would be really helpful for me to understand why the Tcl_DeleteInterp() internally calls many free() functions.

Though my sample code didn't have any cached string, cashed objects (hope i am correct ), what was the reason behind calling free() and mutex_unlock() functions?

If the same code is compiled with Tcl8.6 libraries I couldn't see the free() and mutex_unlock() function calls. So my question is would the free() and mutex_unlock() function calls are due to the implementation done in tcl ?