[racket] Detecting that a place channel is unreachable
Ok, I'll file a low priority feature request then and just make sure I
manually turn it off.
On Sat, Dec 7, 2013 at 9:45 AM, Matthew Flatt <mflatt at cs.utah.edu> wrote:
> You're right: the implementation has that kind of information (for
> non-distributed channels), but it's significant work to add a trigger.
>
> At Fri, 6 Dec 2013 23:53:04 -0800, Eric Dobson wrote:
>> Is there a way to determine if a place channel is unreachable? My
>> experiments with will executors seem to show that they trigger even if
>> the place channel is reachable from another place. Is there a way to
>> determine that all other places don't have access to the value, I
>> assume that it has to be possible because otherwise memory would leak,
>> but maybe getting triggers based of of it would be hard.
>>
>> My goal is to have two places sharing a channel, and one stop sending
>> messages across if the other one is provable not listening. I can make
>> it so that it can turn it off manual, but I'm looking to see if I can
>> get it to work if the listener just lets the channel get gc'd.
>>
>>
>> Testing program:
>> #lang racket/base
>>
>> (require racket/place)
>>
>> (define (holder)
>> (place chan
>> (let loop ([v #f])
>> (define v2 (sync chan))
>> (place-channel-put chan v)
>> (collect-garbage)
>> (loop v2))))
>>
>>
>> (module+ main
>> (define other (holder))
>> (define exec (make-will-executor))
>> (define exec-thread
>> (thread
>> (lambda ()
>> (let loop ()
>> (will-execute exec)
>> (loop)))))
>> (define in
>> (let-values ([(in out) (place-channel)])
>> (place-channel-put other out)
>> (sync other)
>> (will-register exec out
>> (lambda (v) (printf "~a was deleted~n" v)))
>> in))
>> (collect-garbage)
>> ;; Let will execute
>> (sleep 1))
>> ____________________
>> Racket Users list:
>> http://lists.racket-lang.org/users