Clojure

Concurrent with-redefs do not unwind properly, leaving a var permanently changed

Details

  • Type: Enhancement Enhancement
  • Status: Open Open
  • Priority: Minor Minor
  • Resolution: Unresolved
  • Affects Version/s: Release 1.4, Release 1.5
  • Fix Version/s: Backlog
  • Component/s: None
  • Labels:
    None
  • Environment:
    Mac OS, Java 6
  • Patch:
    Code
  • Approval:
    Vetted

Description

On 1.4 and latest master:

user> (defn ten [] 10)
#'user/ten
user> (doall (pmap #(with-redefs [ten (fn [] %)] (ten)) (range 20 100)))
(20 21 22 23 24 25 34 27 28 29 30 31 32 33 34 35 36 37 38 39 39 35 42 43 44 45 48 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 79 87 88 89 90 91 92 93 94 95 97 92 98 99)
user> (ten)
79

Not sure if this is a bug per se, but the doc doesn't mention lack of concurrency safety and my expectation was that the original value would always be restored after any (arbitrarily interleaved) sequence of with-redefs calls.

Activity

Stuart Halloway made changes -
Field Original Value New Value
Issue Type Defect [ 1 ] Enhancement [ 4 ]
Fix Version/s Approved Backlog [ 10034 ]
Approval Vetted [ 10003 ]
Andy Fingerhut made changes -
Andy Fingerhut made changes -
Patch Code [ 10001 ]
Alex Miller made changes -
Fix Version/s Backlog [ 10035 ]
Fix Version/s Approved Backlog [ 10034 ]

People

Vote (0)
Watch (0)

Dates

  • Created:
    Updated: