Skip to content

Commit b9be9b5

Browse files
authored
Merge pull request #387 from uwplse/thread-safe
Ensure thread-safe operations
2 parents b56752b + db00616 commit b9be9b5

File tree

13 files changed

+67
-41
lines changed

13 files changed

+67
-41
lines changed

.github/workflows/tests.yml

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ jobs:
3333
runs-on: ubuntu-latest
3434
strategy:
3535
matrix:
36-
racket-version: [ '7.8', '8.0', '8.1' ]
36+
racket-version: [ '8.0', '8.0', '8.2' ]
3737
precision: [ 'binary32', 'binary64' ]
3838
steps:
3939
- name: "Install Packages"
@@ -62,7 +62,9 @@ jobs:
6262
- name: "Install Packages"
6363
run: sudo apt-get install -y libmpfr6 libmpfr-dev
6464
- name: "Install Racket"
65-
uses: Bogdanp/[email protected]
65+
uses: Bogdanp/[email protected]
66+
with:
67+
version: '8.0'
6668
- name: Install Rust compiler
6769
uses: actions-rs/toolchain@v1
6870
with:
@@ -90,7 +92,9 @@ jobs:
9092
- name: "Install Packages"
9193
run: sudo apt-get install -y libmpfr6 libmpfr-dev
9294
- name: "Install Racket"
93-
uses: Bogdanp/[email protected]
95+
uses: Bogdanp/[email protected]
96+
with:
97+
version: '8.0'
9498
- name: Install Rust compiler
9599
uses: actions-rs/toolchain@v1
96100
with:
@@ -116,15 +120,14 @@ jobs:
116120
needs: [ 'hamming' ]
117121
strategy:
118122
matrix: # this takes a while: don't run too many
119-
racket-version: [ '7.9' ]
120123
precision: [ 'binary32', 'binary64' ]
121124
steps:
122125
- name: "Install Packages"
123126
run: sudo apt-get install -y libmpfr6 libmpfr-dev
124127
- name: "Install Racket"
125-
uses: Bogdanp/setup-racket@v0.5
128+
uses: Bogdanp/setup-racket@v1.3.1
126129
with:
127-
version: ${{ matrix.racket-version }}
130+
version: '8.0'
128131
- uses: actions/checkout@master
129132
- name: "Install dependencies"
130133
run: make install

src/conversions.rkt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
(submod "syntax/rules.rkt" internals) (submod "syntax/syntax.rkt" internals))
66
(provide generate-conversions generate-prec-rewrites get-rewrite-operator *conversions*)
77

8-
(define *conversions* (make-parameter (make-hash)))
8+
(define *conversions* (make-parameter (hash)))
99

1010
(define/contract (string-replace* str changes)
1111
(-> string? (listof (cons/c string? string?)) string?)
@@ -104,8 +104,8 @@
104104
(for/fold ([reprs '()]) ([conv convs])
105105
(define prec1 (first conv))
106106
(define prec2 (last conv))
107-
(hash-update! (*conversions*) prec1 (λ (x) (cons prec2 x)) '())
108-
(hash-update! (*conversions*) prec2 (λ (x) (cons prec1 x)) '())
107+
(*conversions* (hash-update (*conversions*) prec1 (λ (x) (cons prec2 x)) '()))
108+
(*conversions* (hash-update (*conversions*) prec2 (λ (x) (cons prec1 x)) '()))
109109
(generate-prec-rewrite prec1 prec2)
110110
(set-union reprs (list (get-representation prec1) (get-representation prec2)))))
111111
(*needed-reprs* (set-union reprs (*needed-reprs*))))

src/core/localize.rkt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
(register-reset
6161
(λ ()
6262
(*analyze-context* (*pcontext*))
63-
(hash-clear! *analyze-cache*)))
63+
(set! *analyze-cache* (make-hash))))
6464

6565
(define (localize-error prog repr)
6666
(define varmap (map cons (program-variables prog)

src/core/taylor.rkt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,8 @@
9393

9494
(register-reset
9595
(λ ()
96-
(hash-clear! n-sum-to-cache)
97-
(hash-clear! logcache)
98-
(hash-set! logcache 1 '((1 -1 1)))))
96+
(set! n-sum-to-cache (make-hash))
97+
(set! logcache (make-hash '((1 . ((1 -1 1))))))))
9998

10099
(define (taylor var expr*)
101100
"Return a pair (e, n), such that expr ~= e var^n"

src/debug.rkt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
(= val1 val2)
3030
(equal? val1 val2)))
3131

32-
(define *cur-debug-levels* (make-hash))
32+
(define *cur-debug-levels* (make-hasheq))
3333
;; To understand this it might be useful to understand the system.
3434
;; The current level of any debug flag is fluid, within a range.
3535
;; It's "setting" determines the range, or a fixed value,

src/errors.rkt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,5 +81,5 @@
8181

8282
(register-reset
8383
(λ ()
84-
(set-clear! warnings-seen)
84+
(set! warnings-seen (mutable-set))
8585
(set! warning-log '())))

src/function-definitions.rkt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#lang racket
22

3-
(require "config.rkt" "syntax/rules.rkt" "core/matcher.rkt" "programs.rkt" "interface.rkt" "syntax/sugar.rkt")
3+
(require "config.rkt" "syntax/rules.rkt" "core/matcher.rkt""programs.rkt" "interface.rkt" "syntax/sugar.rkt")
44
(provide get-expander get-evaluator)
55

66
(define (evaluation-rule? rule)
@@ -22,6 +22,11 @@
2222
(define expanders (make-hash))
2323
(define evaluators (make-hash))
2424

25+
(register-reset
26+
(λ ()
27+
(set! expanders (make-hash))
28+
(set! evaluators (make-hash))))
29+
2530
(define (make-expander primitives)
2631
(define known-functions (make-hash))
2732
(for ([op primitives])

src/interface.rkt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
[(define (write-proc repr port mode)
2626
(fprintf port "#<representation ~a>" (representation-name repr)))])
2727

28-
(define representations (make-hash))
28+
(define representations (hash))
2929

3030
;; Repr / operator generation
3131
;; Some plugins might define 'templated' reprs (e.g. fixed point with
@@ -55,8 +55,9 @@
5555
(raise-herbie-error "Could not find support for ~a representation" name)))
5656

5757
(define (register-representation! name type repr? . args)
58-
(hash-set! representations name
59-
(apply representation name (get-type type) repr? args)))
58+
(set! representations
59+
(hash-set representations name
60+
(apply representation name (get-type type) repr? args))))
6061

6162
(define-syntax-rule (define-representation (name type repr?) args ...)
6263
(register-representation! 'name 'type repr? args ...))

src/sandbox.rkt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@
2525
(define *reeval-pts* (make-parameter 8000))
2626
(define *timeout* (make-parameter (* 1000 60 5/2)))
2727

28+
;; true if Racket CS <= 8.2
29+
(define cs-places-workaround?
30+
(let ([major (string->number (substring (version) 0 1))]
31+
[minor (string->number (substring (version) 2 3))])
32+
(or (< major 8) (and (= major 8) (<= minor 2)))))
33+
2834
(define (get-p&es context)
2935
(for/lists (pts exs)
3036
([(pt ex) (in-pcontext context)])
@@ -123,6 +129,11 @@
123129
#:render (λ (p order) (write-json (profile->json p)))))
124130
(compute-result test)))
125131

132+
; CS versions <= 8.2: problems with scheduler
133+
; cause places to stay in a suspended state
134+
(when cs-places-workaround?
135+
(thread (lambda () (sync (system-idle-evt)))))
136+
126137
(define eng (engine in-engine))
127138
(if (engine-run (*timeout*) eng)
128139
(engine-result eng)

src/syntax/sugar.rkt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
(module+ test (require rackunit))
77

88
;; name -> (vars repr body)
9-
(define *functions* (make-parameter (make-hash)))
9+
(define *functions* (make-parameter (make-hasheq)))
1010

1111
(define (register-function! name args repr body)
1212
(hash-set! (*functions*) name (list args repr body)))

0 commit comments

Comments
 (0)