dispose* ( disposable -- )
Factor documentation > Factor handbook > The language > Deterministic resource disposal > Writing new destructors
Prev:new-disposable ( class -- disposable )
Next:disposables


Vocabulary
destructors

Inputs and outputs
disposablea disposable object


Generic word contract
Releases operating system resources associated with a disposable object. Disposable objects include streams, memory mapped files, and so on.

Notes
This word should not be called directly. It can be implemented on objects with a disposed slot to ensure that the object is only disposed once.

Definition
IN: destructors

GENERIC: dispose* ( disposable -- )


Methods
USING: accessors audio.engine audio.engine.private destructors
kernel sequences ;

M: audio-clip dispose*
[ dup audio-engine>> clips>> remove! drop ]
[ al-source>> flush-source ] bi ;


USING: accessors audio.engine destructors kernel openal ;

M: audio-engine dispose*
dup stop-audio
[ [ alcDestroyContext ] when* f ] change-al-context
[ [ alcCloseDevice* ] when* f ] change-al-device drop ;


USING: accessors destructors io.sockets.secure.openssl openssl
openssl.libcrypto ;

M: bio dispose* handle>> BIO_free ssl-error ;


USING: accessors destructors llvm.core llvm.wrappers ;

M: buffer dispose* value>> LLVMDisposeMemoryBuffer ;


USING: accessors destructors io.buffers libc ;

M: buffer dispose* ptr>> free ; inline


USING: accessors destructors generic io.ports kernel ;

M: buffered-port dispose*
[
[ buffer>> &dispose drop ]
[ M\ buffered-port dispose* (call-next-method) ] bi
] with-destructors ;


USING: accessors destructors llvm.core llvm.wrappers ;

M: builder dispose* value>> LLVMDisposeBuilder ;


USING: accessors destructors io.streams.c ;

M: c-stream dispose* handle>> fclose ;


USING: assocs cache destructors ;

M: cache-assoc dispose* clear-assoc ;


USING: accessors destructors opencl opencl.ffi opencl.private ;

M: cl-buffer dispose* handle>> clReleaseMemObject cl-success ;


USING: accessors destructors opencl opencl.ffi opencl.private ;

M: cl-context dispose* handle>> clReleaseContext cl-success ;


USING: accessors destructors opencl opencl.ffi opencl.private ;

M: cl-event dispose* handle>> clReleaseEvent cl-success ;


USING: accessors destructors opencl opencl.ffi opencl.private ;

M: cl-kernel dispose* handle>> clReleaseKernel cl-success ;


USING: accessors destructors opencl opencl.ffi opencl.private ;

M: cl-program dispose* handle>> clReleaseProgram cl-success ;


USING: accessors destructors opencl opencl.ffi opencl.private ;

M: cl-queue dispose*
handle>> clReleaseCommandQueue cl-success ;


USING: accessors destructors opencl opencl.ffi opencl.private ;

M: cl-sampler dispose* handle>> clReleaseSampler cl-success ;


USING: accessors curses curses.ffi curses.private destructors ;

M: curses-window dispose* ptr>> delwin curses-error ;


USING: accessors destructors llvm.engine llvm.wrappers ;

M: engine dispose* value>> LLVMDisposeExecutionEngine ;


USING: accessors destructors io.backend.unix.multiplexers.epoll
unix ;

M: epoll-mx dispose* fd>> close-file ;


USING: accessors checksums.openssl.private destructors
openssl.libcrypto ;

M: evp-md-context dispose* handle>> EVP_MD_CTX_destroy ;


USING: accessors destructors gobject.ffi ui.text.pango ;

M: layout dispose* layout>> g_object_unref ;


USING: accessors assocs destructors generic io.backend.unix
io.monitors.linux kernel unix unix.linux.inotify ;

M: linux-monitor dispose*
[ [ wd>> ] [ watches>> ] bi delete-at ] [
dup inotify>> disposed>>
[ drop ] [
[ inotify>> handle>> handle-fd ] [ wd>> ] bi
inotify_rm_watch io-error
] if
] [ M\ linux-monitor dispose* (call-next-method) ] tri ;


USING: destructors io.mmap ;

M: mapped-file dispose* close-mapped-file ;


USING: accessors destructors llvm.core llvm.wrappers ;

M: module dispose* value>> LLVMDisposeModule ;


USING: accessors concurrency.mailboxes destructors io.monitors
io.monitors.private kernel ;

M: monitor dispose*
[ monitor-disposed ] dip queue>> mailbox-put ;


USING: accessors destructors opengl.textures.private sequences
;

M: multi-texture dispose* grid>> [ [ dispose ] each ] each ;


USING: accessors assocs destructors io.sockets.secure.openssl
kernel libc openssl.libssl sequences ;

M: openssl-context dispose*
[
[ aliens>> [ &free drop ] each ]
[ sessions>> values [ SSL_SESSION_free ] each ]
[ handle>> SSL_CTX_free ] tri
] with-destructors ;


USING: accessors combinators destructors io.ports kernel ;

M: output-port dispose*
[
{
[ handle>> &dispose drop ]
[ buffer>> &dispose drop ]
[ port-flush ]
[ handle>> shutdown ]
} cleave
] with-destructors ;


USING: accessors destructors kernel ui.pixel-formats ;

M: pixel-format dispose*
[ (free-pixel-format) ] [ f >>handle drop ] bi ;


USING: accessors destructors io.pools ;

M: pool dispose* connections>> dispose-each ;


USING: accessors destructors io.ports kernel ;

M: port dispose*
[ [ handle>> &dispose drop ] [ handle>> shutdown ] bi ]
with-destructors ;


USING: accessors destructors llvm.core llvm.wrappers ;

M: provider dispose* value>> LLVMDisposeModuleProvider ;


USING: accessors concurrency.messaging destructors generic
io.monitors.recursive kernel ;

M: recursive-monitor dispose*
[ [ +stop+ ] dip thread>> send ]
[ M\ recursive-monitor dispose* (call-next-method) ] bi ;


USING: accessors destructors io.sockets.secure.openssl
openssl.libcrypto ;

M: rsa dispose* handle>> RSA_free ;


USING: accessors destructors io.serial ;

M: serial-port dispose* stream>> dispose ;


USING: accessors destructors kernel opengl opengl.textures
opengl.textures.private ;

M: single-texture dispose*
[ texture>> [ delete-texture ] when* ]
[ display-list>> [ delete-dlist ] when* ] bi ;


USING: accessors destructors io.sockets.secure.openssl kernel
openssl.libssl ;

M: ssl-handle dispose*
[ [ file>> &dispose drop ] [ handle>> SSL_free ] bi ]
with-destructors ;


USING: accessors alien.c-types alien.data audio.engine
destructors generic kernel openal ;

M: static-audio-clip dispose*
[ M\ static-audio-clip dispose* (call-next-method) ]
[ [ 1 ] dip al-buffer>> uint <ref> alDeleteBuffers ] bi ;


USING: accessors destructors io.backend.unix kernel ;

M: stdin dispose*
[
[ control>> &dispose drop ] [ size>> &dispose drop ]
[ data>> &dispose drop ] tri
] with-destructors ;


USING: accessors audio.engine destructors generic kernel openal
sequences ;

M: streaming-audio-clip dispose*
[ M\ streaming-audio-clip dispose* (call-next-method) ]
[ generator>> dispose ]
[ al-buffers>> [ length ] keep alDeleteBuffers ] tri ;


USING: accessors destructors kernel tokyo.abstractdb
tokyo.alien.tcadb ;

M: tokyo-abstractdb dispose*
[ tcadbdel f ] change-handle drop ;


USING: accessors destructors kernel tokyo.alien.tcrdb
tokyo.remotedb ;

M: tokyo-remotedb dispose* [ tcrdbdel f ] change-handle drop ;


USING: accessors audio.vorbis combinators destructors kernel
libc ogg.vorbis ;

M: vorbis-stream dispose*
{
[ temp-state>> [ free ] when* ]
[
comment>>
[ [ vorbis_comment_clear ] [ free ] bi ] when*
]
[ block>> [ free ] when* ]
[ dsp-state>> [ free ] when* ]
[ info>> [ [ vorbis_info_clear ] [ free ] bi ] when* ]
[ stream-state>> [ free ] when* ]
[ page>> [ free ] when* ]
[ sync-state>> [ free ] when* ]
[ packet>> [ free ] when* ]
[ stream>> [ dispose ] when* ]
} cleave ;