[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Chicken-users] 1095 (prerelease) + some eggs
From: |
Joerg F. Wittenberger |
Subject: |
Re: [Chicken-users] 1095 (prerelease) + some eggs |
Date: |
21 Feb 2003 23:51:48 +0100 |
User-agent: |
Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.4 (Common Lisp) |
Sorry
to follow up myself. Stupid editing mistake. Here the actual source
code I handed the compiler.
(define (askemos:run-tcp-server
host port connection-handler
maximum-semaphore name)
(define request-queue (tcp-listen port))
(define (exception-handler ex)
(receive
(title msg args rest) (exception->fields ex)
(logerr "run-tcp-server (host ~a port ~a) ~a ~a ~a\n"
host port title msg args)))
(let loop ()
(handle-exceptions
ex (exception-handler ex)
(receive
(in-port out-port) (tcp-accept request-queue)
(receive
(local remote) (tcp-addresses in-port out-port)
(if maximum-semaphore (semaphore-wait maximum-semaphore))
(thread-start!
(make-thread
(lambda ()
(handle-exceptions
ex (exception-handler ex)
(connection-handler in-port out-port remote)
(if maximum-semaphore (semaphore-signal maximum-semaphore))
(close-input-port in-port)
(with-exception-handler
ex (begin (close-output-port out-port) (loop)))))
name))))
(loop))))
"Joerg F. Wittenberger" <address@hidden> writes:
> While the code runs pretty stable on rscheme, I see:
>
> address@hidden:~/build/Askemos-0.7.0$ ./chicken/askemos chicken/config.scm
> mechanism/debug-access.scm
> Fri, 21 Feb 2003 22:50:58 +0100 Debug access open at port 7070.
> Fri, 21 Feb 2003 22:50:58 +0100 Take off.
> Error: deadlock
>
> The problem can be in a) the new scheduler b) tcp.scm c) askemos. I
> guess it's not askemos for two reasons:
>
> a) Both the rscheme and the chicken version implement the following
> function to run server threads. Here the chicken version:
>
> (define (askemos:run-tcp-server
> host port connection-handler
> maximum-semaphore name)
[...]
Here I pasted some in-the-middle-of-editing code. (The new interface
is closer the the rscheme code than the old one, hence the strange
exception handler.)
> (define request-queue (tcp-listen port))
> (define (exception-handler ex)
> (receive
> (title msg args rest) (exception->fields ex)
> (logerr "run-tcp-server (host ~a port ~a) ~a ~a ~a\n"
> host port title msg args)))
> (let loop ()
> (handle-exceptions
> ex (exception-handler ex)
> (receive
> (in-port out-port) (tcp-accept request-queue)
> (receive
> (local remote) (tcp-addresses in-port out-port)
> (if maximum-semaphore (semaphore-wait maximum-semaphore))
> (thread-start!
> (make-thread
> (lambda ()
> (handle-exceptions
> ex (exception-handler ex)
> (connection-handler in-port remote))
> (if maximum-semaphore (semaphore-signal maximum-semaphore))
> (close-input-port in-port)
> (handler-case (close-output-port out-port)
> ((<condition>)))
> (file-close fd))
> name)))))
> (loop)))
best regards
/Jörg
--
The worst of harm may often result from the best of intentions.
Re: [Chicken-users] 1095 (prerelease) + some eggs, William Annis, 2003/02/24