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:

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.

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 

User Comments: pooryorick added on 2021-05-19 07:16:08:

Fixed in [bdd005f3301eec51].