fd new-disposable swap >>fd ;
M: fd dispose
- dup disposed>> [ drop ] [
+ [
{
[ cancel-operation ]
[ t >>disposed drop ]
[ unregister-disposable ]
[ fd>> close-file ]
} cleave
- ] if ;
+ ] unless-disposed ;
M: fd handle-fd dup check-disposed fd>> ;
M: fd cancel-operation ( fd -- )
- dup disposed>> [ drop ] [
+ [
fd>>
mx get-global
[ remove-input-callbacks [ t swap resume-with ] each ]
[ remove-output-callbacks [ t swap resume-with ] each ]
2bi
- ] if ;
+ ] unless-disposed ;
M: unix tell-handle ( handle -- n )
fd>> 0 SEEK_CUR [ lseek ] unix-system-call [ io-error ] [ ] bi ;
] [ resume-callback t ] if ;
M: win32-handle cancel-operation
- [ check-disposed ] [ handle>> CancelIo drop ] bi ;
+ [ handle>> CancelIo win32-error=0/f ] unless-disposed ;
M: winnt io-multiplex ( nanos -- )
handle-overlapped [ 0 io-multiplex ] when ;
win32-file new-win32-handle ;
M: win32-file dispose
- [ dup disposed>> [ drop ] [ cancel-operation ] if ]
- [ call-next-method ]
- bi ;
+ [ cancel-operation ] [ call-next-method ] bi ;
HOOK: CreateFile-flags io-backend ( DWORD -- DWORD )
HOOK: FileArgs-overlapped io-backend ( port -- overlapped/f )
M: linux-monitor dispose* ( monitor -- )
[ [ wd>> ] [ watches>> ] bi delete-at ]
[
- dup inotify>> disposed>> [ drop ] [
+ dup inotify>> [
[ inotify>> handle>> handle-fd ] [ wd>> ] bi
inotify_rm_watch io-error
- ] if
+ ] unless-disposed
]
[ call-next-method ]
tri ;
monitor tget children>> values dispose-each ;
: pump-step ( msg -- )
- monitor tget disposed>> [ drop ] [
+ monitor tget [
[ [ monitor>> path>> ] [ path>> ] bi append-path ] [ changed>> ] bi
monitor tget queue-change
- ] if ;
+ ] unless-disposed ;
: child-added ( path monitor -- )
path>> prepend-path add-child-monitor ;
-! Copyright (C) 2007, 2009 Doug Coleman, Slava Pestov.
+! Copyright (C) 2007, 2010 Doug Coleman, Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors continuations kernel namespaces make
sequences vectors sets assocs init math ;
GENERIC: dispose ( disposable -- )
-M: object dispose
- dup disposed>> [ drop ] [ t >>disposed dispose* ] if ;
+: unless-disposed ( disposable quot -- )
+ [ dup disposed>> [ drop ] ] dip if ; inline
+
+M: object dispose [ t >>disposed dispose* ] unless-disposed ;
M: disposable dispose
- dup disposed>> [ drop ] [
+ [
[ unregister-disposable ]
[ call-next-method ]
bi
- ] if ;
+ ] unless-disposed ;
: dispose-each ( seq -- )
[