[Stackless] channel.balance wrong?!
mainecoon at gmail.com
Sat Jul 11 08:53:24 CEST 2009
I can think of at least one situation when this could occur, involving
Channel Preference of 1 (Sender):
Channel N is created with preference 1
Tasklet A and B start
Tasklet A runs, receives on N, and blocks
Tasklet B sees N has balance -1, so sends to N. Due to Preference, B will
not yield, instead A is placed at end of runnables queue. The channel's
balance is now 0.
Tasklet B continues running, sees N has a balance of 0, so does not send.
Repeat ad infinitum. Tasklet B never explicitly schedules or gets blocked
otherwise, and so A never wakes up.
On Fri, Jul 10, 2009 at 7:32 PM, Richard Tew <richard.m.tew at gmail.com>wrote:
> On Sat, Jul 11, 2009 at 2:48 AM, Paul Sijben<sijben at eemvalley.com> wrote:
> > I tracked down a bug in my code that occasionally popped up to
> > channel.balance being wrong sometimes.
> > Some part of my code can not afford to block, so it checks the balance
> > wheter it should send something into the channel. If there is a receiver
> > waiting on it, that is fed by a send and the sender will not block. Now
> > I find that just occasionally the process stalls because there is a
> > receiver waiting but the sender does not send as channel.balance==0
> > instead of -1!
> > I am running the current 2.6.2 version of stackless
> > (Python 2.6.2 Stackless 3.1b3 060516 (python-2.6.2:73804M, Jul 3 2009,
> > 11:33:51) )
> > Is this issue known, and possibly solved in svn?
> This issue is not known. It is the first someone has even suggested
> it might be happening. During the eight years or so I was at C.C.P.,
> I never saw the likes of it.
> I would be inclined to believe that there was something wrong with
> your logic, rather than the channel code. And without a reproduction
> case, it is unlikely that it will ever be reproduced unfortunately.
> Stackless mailing list
> Stackless at stackless.com
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Stackless