Re: Race condition in T5-pubsub?
Hi, Am 16.12.2011 17:22, schrieb Howard Lewis Ship: Or t5-pub-sub should do a copy-on-write, rather than copying it for each iteration. Hm, I haven't spent much thought on this idea yet, but I don't see how that could be done in JavaScript. Also, this still leaves the problem of having to decide whether the following listeners should be notified for the current run. Jochen - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Race condition in T5-pubsub?
Or t5-pub-sub should do a copy-on-write, rather than copying it for each iteration. I miss Clojure collections! On Thu, Dec 15, 2011 at 3:37 AM, Jochen Berger wrote: > Hi again, > > I think I was wrong with the term "race condition". After some investigation > I found out what causes the problem. I created a simple demo application > that I can upload I you want me to. > Basically, the problem occurs, when there are multiple subscribers for the > same topic and one of them changes the subscriptions (e.g. by unsubscribing) > for the topic while the publisher function runs. That will lead to the > listener cache being cleared and publisher.listeners being undefined upon > the next iteration of the for loop. > I think this could be fixed by iterating over a clone of publisher.listeners > instead of publisher.listeners itself. Of course that would mean that if one > listener unsubscribes other listeners while running, those would be notified > for the current run anyway. > Any thoughts on that? > > > Jochen > > - > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > -- Howard M. Lewis Ship Creator of Apache Tapestry The source for Tapestry training, mentoring and support. Contact me to learn how I can get you up and productive in Tapestry fast! (971) 678-5210 http://howardlewisship.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Race condition in T5-pubsub?
Hi again, I think I was wrong with the term "race condition". After some investigation I found out what causes the problem. I created a simple demo application that I can upload I you want me to. Basically, the problem occurs, when there are multiple subscribers for the same topic and one of them changes the subscriptions (e.g. by unsubscribing) for the topic while the publisher function runs. That will lead to the listener cache being cleared and publisher.listeners being undefined upon the next iteration of the for loop. I think this could be fixed by iterating over a clone of publisher.listeners instead of publisher.listeners itself. Of course that would mean that if one listener unsubscribes other listeners while running, those would be notified for the current run anyway. Any thoughts on that? Jochen - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Race condition in T5-pubsub?
Hi list, I think I've discovered a race condition in the pubsub code which is kind of funny as I didn't even know these could occur in JavaScript. The problem seems to be related to the purging of the publisher cache. The situation I experience the error in is fairly complex (with multiple listeners subscribing, unsubscribing and signaling, elements being replaced and the like. I haven't yet been able to reproduce the issue with a simpler use case and I'm not entirely sure what exactly happens here. Maybe someone with a better understanding of JavaScript could help here? What seems to happen is that one thread (for want of a better word) calls the createPublisher function. Shortly afterward, another thread calls the subscribe function on the same topic, leading to the cache for that topic being cleared. Now when the first "thread" arrives in line 167, where it says for (var i = 0; i < publisher.listeners.length; i++) { publisher.listeners is undefined as the reference was deleted in between. I managed to fix the issues I encounter by creating a clone of the publisher.listeners array and using that for the loop. I would have created a JIRA but I'm quite at a loss as to explaining what exactly is going on here. Regards, Jochen - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org