!7 sclass DefunctACC extends DynModule { JComponent visualize() { ret hgrid(jbutton("Print", r actualUpdate), jbutton("Clean", r clean); } void actualUpdate { for (Thread t : allThreadsWithACC()) { S desc = threadGroupName(t) + " / " + t.getName(); AccessControlContext acc; try { acc = castGetOpt(t, 'inheritedAccessControlContext); } catch { continue with print("Can't see inside: " + desc); } if (acc == null) continue; //print(acc_programIDs(acc) + ": " + desc); L defunctIDs = acc_defunctProgramIDs(acc); if (nempty(defunctIDs)) print("DEFUNCT! " + defunctIDs + ": " + desc); } } void clean { for (Thread t : allThreadsWithACC()) pcall { S desc = threadGroupName(t) + " / " + t.getName(); AccessControlContext acc = castGetOpt(t, 'inheritedAccessControlContext); if (acc == null) continue; L defunctIDs = acc_defunctProgramIDs(acc); if (nempty(defunctIDs)) { print("DEFUNCT! Cleaning. " + defunctIDs + ": " + desc); set(t, inheritedAccessControlContext := AccessController.getContext()); // TODO: use global context print("CLEANED."); } } } }