Hi Henrik,

On Sat, Jan 02, 2016 at 10:34:25PM +0100, Henrik Sarvell wrote:
> I've recently implemented pub / sub ( http://redis.io/topics/pubsub )
> in my redis class (
> https://bitbucket.org/hsarvell/ext/src/default/redis.l?fileviewer=file-view-default
> ).

Cool!


> (subscribe> R "foo")
> #(wait 1)
> (println "finished")
> 
> with ./pil subscribe.l in /opt/picolisp you will see "finished".
> 
> If you uncomment the wait line you will not see "finished", the script
> stops on (wait 1) and I have no idea why.
> 
> Since I don't pass in a second argument I would assume that wait has
> nothing to do with the *Run global in this case and that execution
> will simply pause for one millisecond and then continue but this does
> not happen.

In fact, it has. 'wait' always first checks for pending events before it
goes to sleep. In 'subscribe>' you start a task on the socket. If there
are data available on that socket already, that task will be executed. I
can't reproduce your setup, but the task calls

   (run *RedisOnSubRes)

where I don't know what '*RedisOnSubRes' contains, but I recommend you
trace that one to see where it hangs.


> So execution continues as soon as we get something back on the socket
> we have established.

Yes, exactly.
 

> I don't get why wait literally needs something coming into (in ... )
> in order to allow continued execution in this case.

If nothing would be coming in, 'wait' would indeed sleep just for
a millisecond and then return. So it must be the scenario described
above.

♪♫ Alex
-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe

Reply via email to