Key-value nodes for exception table. The chained hash table
uses identity comparisons, full locking, and weak references
for keys. The table has a fixed capacity because it only
maintains task exceptions long enough for joiners to access
them, so should never become very large for sustained
periods. However, since we do not know when the last joiner
completes, we must use weak references and expunge them. We do
so on each operation (hence full locking). Also, some thread in
any ForkJoinPool will call helpExpungeStaleExceptions when its
pool becomes isQuiescent.
final
class ExceptionNode : WeakReference!IForkJoinTask {
Key-value nodes for exception table. The chained hash table uses identity comparisons, full locking, and weak references for keys. The table has a fixed capacity because it only maintains task exceptions long enough for joiners to access them, so should never become very large for sustained periods. However, since we do not know when the last joiner completes, we must use weak references and expunge them. We do so on each operation (hence full locking). Also, some thread in any ForkJoinPool will call helpExpungeStaleExceptions when its pool becomes isQuiescent.