alien,stack-checker.alien: move callback-destructor to the alien vocab

It can't be placed in stack-checker.alien because that vocab isn't
included in deployed images which lead to weird errors when the
destructors trigger.
db4
Björn Lindqvist 2014-09-22 00:02:57 +02:00 committed by John Benediktsson
parent 3f65984055
commit 5cf8c7cfba
2 changed files with 11 additions and 10 deletions

View File

@ -104,14 +104,6 @@ TUPLE: alien-callback-params < alien-node-params xt ;
! Quotation which coerces return value to required type ! Quotation which coerces return value to required type
infer-return ; infer-return ;
: delete-values ( value assoc -- )
[ rot drop = not ] with assoc-filter! drop ;
TUPLE: callback-destructor callback ;
M: callback-destructor dispose ( disposable -- )
callback>> [ callbacks get delete-values ] [ free-callback ] bi ;
: callback-xt ( word -- alien ) : callback-xt ( word -- alien )
callbacks get [ callbacks get [
dup "stack-cleanup" word-prop <callback> dup "stack-cleanup" word-prop <callback>

View File

@ -1,7 +1,7 @@
! Copyright (C) 2004, 2010 Slava Pestov. ! Copyright (C) 2004, 2010 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors byte-arrays byte-vectors continuations.private USING: accessors assocs byte-arrays byte-vectors continuations.private
init kernel kernel.private math namespaces sequences ; destructors init kernel kernel.private math namespaces sequences ;
IN: alien IN: alien
BUILTIN: alien { underlying c-ptr read-only initial: f } expired ; BUILTIN: alien { underlying c-ptr read-only initial: f } expired ;
@ -111,6 +111,15 @@ SYMBOL: callbacks
current-callback current-callback
[ 2drop call ] [ swap call( callback -- ) drop ] 3bi ; inline [ 2drop call ] [ swap call( callback -- ) drop ] 3bi ; inline
! Used by stack-checker.alien to register destructors for callbacks.
TUPLE: callback-destructor callback ;
: delete-values ( value assoc -- )
[ rot drop = not ] with assoc-filter! drop ;
M: callback-destructor dispose ( disposable -- )
callback>> [ callbacks get delete-values ] [ free-callback ] bi ;
! A utility for defining global variables that are recompiled in ! A utility for defining global variables that are recompiled in
! every session ! every session
TUPLE: expiry-check object alien ; TUPLE: expiry-check object alien ;