[CLJ-943] When load-lib fails, a namespace is still created Created: 01/Mar/12 Updated: 15/Jun/12 Resolved: 15/Jun/12 |
|
| Status: | Closed |
| Project: | Clojure |
| Component/s: | None |
| Affects Version/s: | Release 1.3, Release 1.4 |
| Fix Version/s: | Release 1.5 |
| Type: | Defect | Priority: | Major |
| Reporter: | Hugo Duncan | Assignee: | Unassigned |
| Resolution: | Completed | Votes: | 0 |
| Labels: | None | ||
| Attachments: |
|
| Patch: | Code and Test |
| Approval: | Ok |
| Description |
|
When requiring a namespace that doesn't compile, a namespace is still created. The attached patch removes the namespace on failure if the namespace wasn't already present on entry to load-lib. See the test case in the patch for repro instructions. This is obviously a subset of having atomic loads. Would a step further in this direction, e.g. using a swapable state object within clojure.lang.Namespace be of interest? |
| Comments |
| Comment by Stuart Halloway [ 08/Jun/12 3:17 PM ] |
|
Why catch Exception, not Throwable? |
| Comment by Stuart Halloway [ 08/Jun/12 3:23 PM ] |
|
This patch accomplishes its purpose, although (in the absence of fully atomic load) I would imagine it creates a race condition if one thread tried to load a broken namespace while another thread tried simply to create a namespace. Marked screened anyway... |