[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [plt-scheme] Call/cc problem

Unless you need to handle repeated responses to the same call from A
to B or you need to handle the responses out of order, I would
call (make-icmd (read)) from within send/sync-command.  That will block
until B, the other OS process, sends the response.

If you want to figure out why your program doesn't work anyway, then 
check that send/sync-command is always called from the same thread as


At Wed, 12 Jun 2002 22:29:43 +0200, Erich Rast wrote:
> >In MzScheme, continuations may only be invoked by the same thread that
> >created them.  That's probably why you received the error message
> >   "continuation application: attempted to  cross a continuation boundary".
> >There are a few other places that set continuation boundaries, too, though.
> >
> >Why can't A block on a semaphore until it receives an response from B?
> Sorry, there was a similar reply on Usenet (posting to 
> comp.lang.scheme finally worked).
> My post was misleading: A and B are different *operating system 
> processes* or in other words different end-user applications. B is 
> not written in MzScheme.
> B talks to A like if a user was typing into MzScheme (A) running in 
> an interactive shell. It's a nasty hack... and it just doesn't work 
> because I've made some error, I guess.
> Perhaps the code does help. It probably contains a stupid and 
> extremely obvious error:
> (define (send/sync-command command)   (call/cc    (lambda (cc) 
> (send wp:Continuation-Table            store-command-continuation! 
> command cc)       (send-command command)      #t))   (display 
> "Send/sync body")(newline))
> (define (global-command-handler data)   (let* ((command (make-icmd 
> data))          (continue (send wp:Continuation-Table 
> handle-command                   command)))     (if continue 
> (continue command)         (begin           (print (icmd-data 
> command))           (newline)))))
> wp:Continuation-Table% is a class that currently is just a wrapper to 
> a hash-table. Handle-command returns the continuation, or #f if its 
> argument is not a reply to a previous command.
> Any ideas?
> Regards,
> Erich