From b94a20cc8aca24b88ffa8ee9deb706e485349a02 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 12 May 2008 22:30:18 -0500 Subject: [PATCH] Fix circular dependency --- extra/destructors/destructors.factor | 32 +--------------------- extra/io/nonblocking/nonblocking.factor | 13 +++++++++ extra/io/unix/sockets/secure/secure.factor | 4 ++- extra/io/unix/sockets/sockets.factor | 6 ++-- extra/io/windows/windows.factor | 12 ++++++++ 5 files changed, 32 insertions(+), 35 deletions(-) diff --git a/extra/destructors/destructors.factor b/extra/destructors/destructors.factor index 3013c44327..3d5e19520f 100755 --- a/extra/destructors/destructors.factor +++ b/extra/destructors/destructors.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2007 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors continuations io.backend io.nonblocking libc +USING: accessors continuations io.backend libc kernel namespaces sequences system vectors ; IN: destructors @@ -49,33 +49,3 @@ M: memory-destructor dispose ( obj -- ) : free-later ( alien -- ) add-error-destructor ; - -! Handles -TUPLE: handle-destructor alien ; - -C: handle-destructor - -M: handle-destructor dispose ( obj -- ) - alien>> close-handle ; - -: close-always ( handle -- ) - add-always-destructor ; - -: close-later ( handle -- ) - add-error-destructor ; - -! Sockets -TUPLE: socket-destructor alien ; - -C: socket-destructor - -HOOK: destruct-socket io-backend ( obj -- ) - -M: socket-destructor dispose ( obj -- ) - alien>> destruct-socket ; - -: close-socket-always ( handle -- ) - add-always-destructor ; - -: close-socket-later ( handle -- ) - add-error-destructor ; diff --git a/extra/io/nonblocking/nonblocking.factor b/extra/io/nonblocking/nonblocking.factor index b78cfecbaf..74133e5abb 100755 --- a/extra/io/nonblocking/nonblocking.factor +++ b/extra/io/nonblocking/nonblocking.factor @@ -20,6 +20,19 @@ GENERIC: init-handle ( handle -- ) GENERIC: close-handle ( handle -- ) +TUPLE: handle-destructor handle ; + +C: handle-destructor + +M: handle-destructor dispose ( obj -- ) + handle>> close-handle ; + +: close-always ( handle -- ) + add-always-destructor ; + +: close-later ( handle -- ) + add-error-destructor ; + : ( handle class -- port ) new swap dup init-handle >>handle ; inline diff --git a/extra/io/unix/sockets/secure/secure.factor b/extra/io/unix/sockets/secure/secure.factor index 2aa0792070..e8bcd0e0f0 100644 --- a/extra/io/unix/sockets/secure/secure.factor +++ b/extra/io/unix/sockets/secure/secure.factor @@ -6,11 +6,13 @@ continuations destructors openssl openssl.libcrypto openssl.libssl io.files io.nonblocking io.unix.backend io.unix.sockets io.encodings.ascii io.buffers io.sockets io.sockets.secure -unix.ffi ; +unix ; IN: io.unix.sockets.secure ! todo: SSL_pending, rehandshake ! do we call write twice, wth 0 bytes at the end? +! check-certificate at some point +! test on windows M: ssl-handle handle-fd file>> ; diff --git a/extra/io/unix/sockets/sockets.factor b/extra/io/unix/sockets/sockets.factor index 9d02b4b151..fee4821f50 100755 --- a/extra/io/unix/sockets/sockets.factor +++ b/extra/io/unix/sockets/sockets.factor @@ -3,9 +3,9 @@ USING: alien alien.c-types alien.strings generic kernel math namespaces threads sequences byte-arrays io.nonblocking io.binary io.unix.backend io.streams.duplex io.sockets.impl -io.backend io.files io.files.private io.encodings.utf8 -math.parser continuations libc combinators system accessors -qualified unix ; +io.backend io.nonblocking io.files io.files.private +io.encodings.utf8 math.parser continuations libc combinators +system accessors qualified destructors unix ; EXCLUDE: io => read write close ; EXCLUDE: io.sockets => accept ; diff --git a/extra/io/windows/windows.factor b/extra/io/windows/windows.factor index c2718c4189..6f793bc939 100755 --- a/extra/io/windows/windows.factor +++ b/extra/io/windows/windows.factor @@ -175,6 +175,18 @@ USE: windows.winsock [ server-sockaddr ] keep sockaddr-type heap-size bind socket-error ; +TUPLE: socket-destructor alien ; + +C: socket-destructor + +HOOK: destruct-socket io-backend ( obj -- ) + +M: socket-destructor dispose ( obj -- ) + alien>> destruct-socket ; + +: close-socket-later ( handle -- ) + add-error-destructor ; + : server-fd ( addrspec type -- fd ) >r dup protocol-family r> open-socket dup close-socket-later