io.ports: More correct memory handling. There are still leaks in the tests...
							parent
							
								
									3143222223
								
							
						
					
					
						commit
						30673f65cf
					
				| 
						 | 
					@ -202,7 +202,10 @@ M: output-port dispose*
 | 
				
			||||||
    ] with-destructors ;
 | 
					    ] with-destructors ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
M: buffered-port dispose*
 | 
					M: buffered-port dispose*
 | 
				
			||||||
    [ call-next-method ] [ buffer>> dispose ] bi ;
 | 
					    [
 | 
				
			||||||
 | 
					        [ buffer>> &dispose drop ]
 | 
				
			||||||
 | 
					        [ call-next-method ] bi
 | 
				
			||||||
 | 
					    ] with-destructors ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
M: port cancel-operation handle>> cancel-operation ;
 | 
					M: port cancel-operation handle>> cancel-operation ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -133,10 +133,12 @@ M: openssl <secure-context> ( config -- context )
 | 
				
			||||||
    ] with-destructors ;
 | 
					    ] with-destructors ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
M: openssl-context dispose*
 | 
					M: openssl-context dispose*
 | 
				
			||||||
    [ aliens>> [ free ] each ]
 | 
					    [
 | 
				
			||||||
    [ sessions>> values [ SSL_SESSION_free ] each ]
 | 
					        [ aliens>> [ &free drop ] each ]
 | 
				
			||||||
    [ handle>> SSL_CTX_free ]
 | 
					        [ sessions>> values [ SSL_SESSION_free ] each ]
 | 
				
			||||||
    tri ;
 | 
					        [ handle>> SSL_CTX_free ]
 | 
				
			||||||
 | 
					        tri
 | 
				
			||||||
 | 
					    ] with-destructors ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TUPLE: ssl-handle < disposable file handle connected ;
 | 
					TUPLE: ssl-handle < disposable file handle connected ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -150,13 +152,19 @@ SYMBOL: default-secure-context
 | 
				
			||||||
    ] unless* ;
 | 
					    ] unless* ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: <ssl-handle> ( fd -- ssl )
 | 
					: <ssl-handle> ( fd -- ssl )
 | 
				
			||||||
    ssl-handle new-disposable
 | 
					    [
 | 
				
			||||||
    current-secure-context handle>> SSL_new
 | 
					        ssl-handle new-disposable |dispose
 | 
				
			||||||
    dup ssl-error >>handle
 | 
					        current-secure-context handle>> SSL_new
 | 
				
			||||||
    swap >>file ;
 | 
					        dup ssl-error >>handle
 | 
				
			||||||
 | 
					        swap >>file
 | 
				
			||||||
 | 
					    ] with-destructors ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
M: ssl-handle dispose*
 | 
					M: ssl-handle dispose*
 | 
				
			||||||
    [ handle>> SSL_free ] [ file>> dispose ] bi ;
 | 
					    [
 | 
				
			||||||
 | 
					        ! Free file>> after SSL_free
 | 
				
			||||||
 | 
					        [ file>> &dispose drop ]
 | 
				
			||||||
 | 
					        [ handle>> SSL_free ] bi
 | 
				
			||||||
 | 
					    ] with-destructors ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: check-verify-result ( ssl-handle -- )
 | 
					: check-verify-result ( ssl-handle -- )
 | 
				
			||||||
    SSL_get_verify_result dup X509_V_OK =
 | 
					    SSL_get_verify_result dup X509_V_OK =
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -65,10 +65,11 @@ io.sockets.secure.debug ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[ ] [
 | 
					[ ] [
 | 
				
			||||||
    [
 | 
					    [
 | 
				
			||||||
        "127.0.0.1" 0 <inet4> ascii <server> [
 | 
					        [
 | 
				
			||||||
            dup addr>> port>> "port" get fulfill
 | 
					            "127.0.0.1" 0 <inet4> ascii <server> &dispose 
 | 
				
			||||||
            accept drop 1 minutes sleep dispose
 | 
					                dup addr>> port>> "port" get fulfill
 | 
				
			||||||
        ] with-disposal
 | 
					                accept drop &dispose 1 minutes sleep
 | 
				
			||||||
 | 
					        ] with-destructors
 | 
				
			||||||
    ] "Silly server" spawn drop
 | 
					    ] "Silly server" spawn drop
 | 
				
			||||||
] unit-test
 | 
					] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -83,18 +84,22 @@ io.sockets.secure.debug ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[ ] [
 | 
					[ ] [
 | 
				
			||||||
    [
 | 
					    [
 | 
				
			||||||
        "127.0.0.1" "port" get ?promise
 | 
					        [
 | 
				
			||||||
        <inet4> ascii <client> drop 1 minutes sleep dispose
 | 
					            "127.0.0.1" "port" get ?promise
 | 
				
			||||||
 | 
					            <inet4> ascii <client> drop &dispose 1 minutes sleep
 | 
				
			||||||
 | 
					        ] with-destructors
 | 
				
			||||||
    ] "Silly client" spawn drop
 | 
					    ] "Silly client" spawn drop
 | 
				
			||||||
] unit-test
 | 
					] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[
 | 
					[
 | 
				
			||||||
    1 seconds secure-socket-timeout [
 | 
					    1 seconds secure-socket-timeout [
 | 
				
			||||||
        [
 | 
					        [
 | 
				
			||||||
            "127.0.0.1" 0 <inet4> <secure> ascii <server> [
 | 
					            [
 | 
				
			||||||
                dup addr>> addrspec>> port>> "port" get fulfill
 | 
					                "127.0.0.1" 0 <inet4> <secure> ascii <server> [
 | 
				
			||||||
                accept drop dup stream-read1 drop dispose
 | 
					                    dup addr>> addrspec>> port>> "port" get fulfill
 | 
				
			||||||
            ] with-disposal
 | 
					                    accept drop &dispose dup stream-read1 drop
 | 
				
			||||||
 | 
					                ] with-disposal
 | 
				
			||||||
 | 
					            ] with-destructors
 | 
				
			||||||
        ] with-test-context
 | 
					        ] with-test-context
 | 
				
			||||||
    ] with-variable
 | 
					    ] with-variable
 | 
				
			||||||
] [ io-timeout? ] must-fail-with
 | 
					] [ io-timeout? ] must-fail-with
 | 
				
			||||||
| 
						 | 
					@ -108,11 +113,13 @@ io.sockets.secure.debug ;
 | 
				
			||||||
    [ ] [
 | 
					    [ ] [
 | 
				
			||||||
        [
 | 
					        [
 | 
				
			||||||
            [
 | 
					            [
 | 
				
			||||||
                "127.0.0.1" 0 <inet4> <secure> ascii <server> [
 | 
					                [
 | 
				
			||||||
                    dup addr>> addrspec>> port>> "port" get fulfill
 | 
					                    "127.0.0.1" 0 <inet4> <secure> ascii <server> [
 | 
				
			||||||
                    accept drop 1 minutes sleep dispose
 | 
					                        dup addr>> addrspec>> port>> "port" get fulfill
 | 
				
			||||||
                ] with-disposal
 | 
					                        accept drop &dispose 1 minutes sleep
 | 
				
			||||||
            ] with-test-context
 | 
					                    ] with-disposal
 | 
				
			||||||
 | 
					                ] with-test-context
 | 
				
			||||||
 | 
					            ] with-destructors
 | 
				
			||||||
        ] "Silly server" spawn drop
 | 
					        ] "Silly server" spawn drop
 | 
				
			||||||
    ] unit-test
 | 
					    ] unit-test
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
| 
						 | 
					@ -131,20 +138,24 @@ io.sockets.secure.debug ;
 | 
				
			||||||
    [ ] [
 | 
					    [ ] [
 | 
				
			||||||
        [
 | 
					        [
 | 
				
			||||||
            [
 | 
					            [
 | 
				
			||||||
                "127.0.0.1" "port" get ?promise
 | 
					                [
 | 
				
			||||||
                <inet4> <secure> ascii <client> drop 1 minutes sleep dispose
 | 
					                    "127.0.0.1" "port" get ?promise
 | 
				
			||||||
            ] with-test-context
 | 
					                    <inet4> <secure> ascii <client> drop &dispose 1 minutes sleep
 | 
				
			||||||
 | 
					                ] with-test-context
 | 
				
			||||||
 | 
					            ] with-destructors
 | 
				
			||||||
        ] "Silly client" spawn drop
 | 
					        ] "Silly client" spawn drop
 | 
				
			||||||
    ] unit-test
 | 
					    ] unit-test
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    [
 | 
					    [
 | 
				
			||||||
        1 seconds secure-socket-timeout [
 | 
					        [
 | 
				
			||||||
            [
 | 
					            1 seconds secure-socket-timeout [
 | 
				
			||||||
                "127.0.0.1" 0 <inet4> <secure> ascii <server> [
 | 
					                [
 | 
				
			||||||
                    dup addr>> addrspec>> port>> "port" get fulfill
 | 
					                    "127.0.0.1" 0 <inet4> <secure> ascii <server> [
 | 
				
			||||||
                    accept drop dispose
 | 
					                        dup addr>> addrspec>> port>> "port" get fulfill
 | 
				
			||||||
                ] with-disposal
 | 
					                        accept drop &dispose
 | 
				
			||||||
            ] with-test-context
 | 
					                    ] with-disposal
 | 
				
			||||||
        ] with-variable
 | 
					                ] with-test-context
 | 
				
			||||||
 | 
					            ] with-variable
 | 
				
			||||||
 | 
					        ] with-destructors
 | 
				
			||||||
    ] [ io-timeout? ] must-fail-with
 | 
					    ] [ io-timeout? ] must-fail-with
 | 
				
			||||||
] drop
 | 
					] drop
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue