diff --git a/extra/io/unix/backend/backend.factor b/extra/io/unix/backend/backend.factor index 2a85beac02..67856a0570 100755 --- a/extra/io/unix/backend/backend.factor +++ b/extra/io/unix/backend/backend.factor @@ -24,8 +24,13 @@ TUPLE: fd fd disposed ; [ >>fd ] tri ; -M: fd dispose* - [ cancel-operation ] [ fd>> close-file ] bi ; +M: fd dispose + dup disposed>> [ drop ] [ + [ cancel-operation ] + [ t >>disposed drop ] + [ fd>> close-file ] + tri + ] if ; M: fd handle-fd dup check-disposed fd>> ; diff --git a/extra/io/windows/windows.factor b/extra/io/windows/windows.factor index abfffdf93a..5e10389c44 100755 --- a/extra/io/windows/windows.factor +++ b/extra/io/windows/windows.factor @@ -24,8 +24,10 @@ TUPLE: win32-file < win32-handle ptr ; : ( handle -- win32-file ) win32-file new-win32-handle ; -M: win32-file dispose* - [ cancel-operation ] [ call-next-method ] bi ; +M: win32-file dispose + dup disposed>> [ drop ] [ + [ cancel-operation ] [ call-next-method ] bi + ] if ; HOOK: CreateFile-flags io-backend ( DWORD -- DWORD ) HOOK: FileArgs-overlapped io-backend ( port -- overlapped/f )