Oops, that changes doc is http://github.com/clojure/clojure/blob/1.2.x/changes.txt
On Oct 3, 6:52 pm, Randy Hudson <randy_hud...@mac.com> wrote: > One thing that did change between 1.1 and 1.2 is agent error handling. > The 1.2 changes doc (http://github.com/clojure/clojure/blob/1.2.x/ > hanges.txt) shows several new agent error handling functions, a couple > of deprecated ones, an improved 'await docstring -- which now says: > > "Blocks the current thread (indefinitely!) until all actions > dispatched thus far, from this thread or agent, to the agent(s) have > occurred. Will block on failed agents. Will never return if > a failed agent is restarted with :clear-actions true." > > So I'm surmising that you have a failed agent, and because of the 1.2 > changes you're not getting the same kind of error indication you were > apparently expecting. > > -- Randy > > On Oct 3, 9:59 am, Lee Spector <lspec...@hampshire.edu> wrote: > > > > > Although this isn't yet making any real sense to me I believe I MAY have > > traced an elusive problem in code that I ported from clojure 1.1 to 1.2 to > > the way in which big integers are handled in 1.2. I've seen (and > > participated in) some conversations about handling bignums but I don't > > recall what particular changes were slated to happen in the change from 1.1 > > to 1.2 or to 1.3-in-progress -- can someone point me to a summary? > > > Regardless of what is supposed to change which each version (and if I > > recall correctly some of the changes are things that I won't love...) I > > think that the behavior that I've observed may point to a bug because I'm > > not getting numeric exceptions or incorrect numeric results but rather hung > > processes awaiting agent send results. The computations being performed in > > the forms that I send to the agents aren't stuck in infinite computations > > -- the CPU usage goes to near zero and eclipse's debugger shows the thread > > pool threads suspended (but I don't get any "an agent had errors" > > messages). They look to me like they're deadlocked, but I can't understand > > how they could be, since none of the computations in the send forms uses > > any concurrency primitives that might block. > > > I don't have any direct evidence that it's the numerics at all, and I have > > not yet been able to produce a repeatable example that reliably produces > > the problem -- this emerges only after a long time in a system that > > involves a lot of randomness -- but after exploring many other options I > > found that if I could prevent the problem by lowering one of my numeric > > limits. I think I've ruled out other obvious candidates for this behavior, > > and lowering the limits does seem to fix the problem, so I'm beginning to > > think that it really might be the numerics. > > > Does anyone have an idea of anything in the 1.2 numerics that might be > > responsible for this? If so, then I hope I'm correct in assuming that that > > should be fixed. Producing an exception or an incorrect result are both bad > > enough -- I'd personally have automatic promotion to prevent such things > > even at a small cost for all math -- but mysteriously hung processes are > > certainly worse. > > > Here are the stacks as shown in the eclipse debugger when I'm in the hung > > state. Each of my thread pool threads looks like this: > > > Thread [pool-1-thread-2] (Suspended) > > Unsafe.park(boolean, long) line: not available [native method] > > LockSupport.park(Object) line: 158 > > AbstractQueuedSynchronizer$ConditionObject.await() line: 1925 > > [local variables unavailable] > > LinkedBlockingQueue<E>.take() line: 399 [local variables > > unavailable] > > ThreadPoolExecutor.getTask() line: 947 [local variables > > unavailable] > > ThreadPoolExecutor$Worker.run() line: 907 [local variables > > unavailable] > > Thread.run() line: 637 [local variables unavailable] > > > And my main thread -- the one that is stuck at "await" -- looks like this: > > > Thread [main] (Suspended) > > Unsafe.park(boolean, long) line: not available [native method] > > LockSupport.park(Object) line: 158 > > > > CountDownLatch$Sync(AbstractQueuedSynchronizer).parkAndCheckInterrupt() > > line: 747 > > > > CountDownLatch$Sync(AbstractQueuedSynchronizer).doAcquireSharedInterruptibl > > y(int) line: 905 > > > > CountDownLatch$Sync(AbstractQueuedSynchronizer).acquireSharedInterruptibly( > > int) line: 1217 > > CountDownLatch.await() line: 207 [local variables unavailable] > > core.clj line: 2485 > > core$await(RestFn).applyTo(ISeq) line: 138 > > core.clj line: 540 > > clojush.clj line: 1549 > > clojush$pushgp(RestFn).invoke(Object, Object, Object, Object, > > Object, Object, Object, Object, Object, Object, Object, Object, Object, > > Object, Object, Object, Object, Object, Object, Object) line: 1178 > > regression.clj line: 281 > > Compiler.eval(Object, boolean) line: 5424 > > Compiler.load(Reader, String, String) line: 5857 > > RT.loadResourceScript(Class, String, boolean) line: 340 > > RT.loadResourceScript(String, boolean) line: 327 > > RT.loadResourceScript(String) line: 319 > > main.clj line: 220 > > repl_ln.clj line: 107 > > repl_ln.clj line: 117 > > repl_ln.clj line: 144 > > main.clj line: 193 > > main.clj line: 192 > > main$repl(RestFn).invoke(Object, Object, Object, Object, Object, > > Object, Object, Object, Object, Object, Object, Object, Object, Object, > > Object, Object) line: 906 > > repl_ln.clj line: 263 > > repl_ln$repl(RestFn).invoke(Object, Object) line: 422 > > repl_ln.clj line: 140 > > repl_ln$_main(RestFn).applyTo(ISeq) line: 138 > > repl_ln.main(String[]) line: not available > > > Any help would be appreciated! > > > Thanks, -Lee -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en