From 5f3dde7e26c7555bd4e8dd1181021434110bd7b4 Mon Sep 17 00:00:00 2001 From: Chris Double Date: Fri, 12 Oct 2007 10:17:57 +1300 Subject: [PATCH] Fix concurrency:fulfill unbalanced stack issue --- cp_dir | 0 extra/concurrency/concurrency.factor | 6 ++++-- 2 files changed, 4 insertions(+), 2 deletions(-) mode change 100644 => 100755 cp_dir diff --git a/cp_dir b/cp_dir old mode 100644 new mode 100755 diff --git a/extra/concurrency/concurrency.factor b/extra/concurrency/concurrency.factor index 32ae3e5940..14f74f5d55 100644 --- a/extra/concurrency/concurrency.factor +++ b/extra/concurrency/concurrency.factor @@ -286,13 +286,15 @@ TUPLE: promise fulfilled? value processes ; : fulfill ( value promise -- ) #! Set the future of the promise to the given value. Threads #! blocking on the promise will then be released. - dup promise-fulfilled? [ + dup promise-fulfilled? [ + 2drop + ] [ [ set-promise-value ] keep [ t swap set-promise-fulfilled? ] keep [ promise-processes ] keep 0 swap set-promise-processes [ schedule-thread ] each yield - ] unless ; + ] if ;