If this is possible, does anyone know how to do it? (the “Newless Cluebies” forum has disappeared in recent shuffles, so this seemed the best place to ask for help :))
In short, I have a reference to a Thread, and I want to get a stack trace for where that thread currently is. I’m pretty sure this is impossible, because it would make finding deadlocks considerably easier, and I’ve never heard of it in that context :). AFAICS there is no architectural reason why Java doesn’t support this - unless OS schedulers don’t allow you to peek at other threads’ stack frames etc?
FYI, I’m fed up with the bizarre bugs in NIO that appear to be deadlocks within the NIO library. I call Selector.wakeup() and I get ignored - that should NOT be possible, AFAICS, according to the docs. Seeing as I have references to all the user threads in the VM, I could easily take a “snapshot” of the stacktrace of each of them using the code I’m looking for. Since the most interesting ones appear to be deadlocked, I can’t see a way of getting that snapshot otherwise :).
" If another thread is currently blocked in an invocation of the select() or select(long) methods then that invocation will return immediately" - this is manifestly NOT happening, but Sun would never accept a bug report on this without a test case (fair enough, given how tricky deadlock scenarios are to reproduce), and I can’t gather enough info to work out a test case for this :(. Unless Sun’s bug team would accept 2 Mb of source code as a test case…
EDIT: I’d really like to believe there are no deadlocks in the NIO lib, but e.g. the most recent failure-to-wakeup problem just solved itself merely by restarting a few times. On the third or fourth restart, following the exact same procedure each time, it Just Worked. The procedure was run by hand, so the main difference was the timing of each action :(.