Tcl Source Code

View Ticket
Login
Ticket UUID: e39cb3f462631a9973e48d27cf5098ca6b537aa
Title: namespace is removed from other namespace paths before deletion is complete
Type: Bug Version:
Submitter: pooryorick Created on: 2021-05-18 21:43:56
Subsystem: 21. [namespace] Assigned To: nobody
Priority: 5 Medium Severity: Minor
Status: Open Last Modified: 2021-06-09 10:25:34
Resolution: Fixed Closed By: nobody
    Closed on:
Description: (text/x-fossil-wiki)
At least up until commit [2e5531f5f88d047f], in the following script,  the
command being deleted is succesfully called during first trace, but not during
the second trace.  The difference is that in the second script "p1" is not
resolved even though ns2, which is in the process of being deleted, is in the
path.  The namespace is not yet fully deleted though, and p1 should still exist
because the trace on it is still in progress.  The success of the first trigger
illustrates that the name still exists and that the routine can still be
accessed using a fully-qualified name.  Likewise, "p1" should be succesfully
resolved during the second trigger.

A related test case, namespace-51.13, includes an old comment asking whether
the outcome of the test should instead be what is proposed here.



<code><verbatim>
namespace eval ns1 {
	proc p1 caller {
		lappend [namespace parent]::res $caller
	}
}


namespace eval ns1a {
	namespace path [namespace parent]::ns1

	proc t1 {old new op} {
		$old t1
	}
}

namespace eval ns2 {
	proc p1 caller {
		lappend [namespace parent]::res $caller
	}
}

namespace eval ns2a {
	namespace path [namespace parent]::ns2

	proc t1 {old new op} {
		[namespace tail $old] t2
	}
}


trace add command ns1::p1 delete ns1a::t1
namespace delete ns1

trace add command ns2::p1 delete ns2a::t1
namespace delete ns2

puts $res ;# -> t1 
</verbatim></code>
User Comments: pooryorick added on 2021-05-19 07:16:08: (text/x-fossil-wiki)
Fixed in [bdd005f3301eec51].