From 6a6936481758faff042678e265e3db0b6c43c80b Mon Sep 17 00:00:00 2001 From: Matt Birkholz Date: Tue, 10 Mar 2015 14:43:57 -0700 Subject: [PATCH] smp: without-interrupts: rbtree.scm --- README.txt | 10 ++++++++++ src/runtime/rbtree.scm | 10 ++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/README.txt b/README.txt index b87b351f9..0b4bd01fd 100644 --- a/README.txt +++ b/README.txt @@ -1504,10 +1504,20 @@ The hits with accompanying analysis: random-source. rbtree.scm:131: (without-interrupts + Caller: rb-tree/insert! is exported to () rbtree.scm:180:(define-integrable (without-interrupts thunk) + Redundant definition. rbtree.scm:181: (let ((interrupt-mask (set-interrupt-enables! interrupt-mask/gc-ok))) + Caller: without-interrupts rbtree.scm:183: (set-interrupt-enables! interrupt-mask) + Caller: without-interrupts rbtree.scm:197: (without-interrupts + Caller: delete-node! + rb-tree/delete! is exported to () + rb-tree/delete-{min,max}{,-datum,-pair}! is exported to () + + This seems to be about avoid aborts that could break the + subtree. Turned without-interrupts into without-interruption. rep.scm:141: (with-interrupt-mask interrupt-mask/all diff --git a/src/runtime/rbtree.scm b/src/runtime/rbtree.scm index c10daa52b..51a7e6593 100644 --- a/src/runtime/rbtree.scm +++ b/src/runtime/rbtree.scm @@ -128,7 +128,7 @@ USA. (let loop ((x (tree-root tree)) (y #f) (d #f)) (cond ((not x) (let ((z (make-node key datum))) - (without-interrupts + (without-interruption (lambda () (set-node-up! z y) (cond ((not y) (set-tree-root! tree z)) @@ -176,12 +176,6 @@ USA. ((null? alist)) (rb-tree/insert! tree (caar alist) (cdar alist))) tree)) - -(define-integrable (without-interrupts thunk) - (let ((interrupt-mask (set-interrupt-enables! interrupt-mask/gc-ok))) - (thunk) - (set-interrupt-enables! interrupt-mask) - unspecific)) (define (rb-tree/delete! tree key) (guarantee-rb-tree tree 'RB-TREE/DELETE!) @@ -194,7 +188,7 @@ USA. (else (loop (node-right x))))))) (define (delete-node! tree z) - (without-interrupts + (without-interruption (lambda () (let ((z (if (and (node-left z) (node-right z)) -- 2.25.1