chicken-users
[Top][All Lists]
Advanced

[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.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]