Libraryless. Click here for Pure Java version (10512L/59K).
sbool cleanUp_interruptThreads; // experimental static void cleanUp(O c) { if (c == null) ret; if (c cast AutoCloseable) ret with close_pcall(c); if (c cast java.util.Timer) ret with c.cancel(); if (c cast Collection) { cleanUp(c); ret; } if (c cast Map) { for (O o : keysList(c)) cleanUp(o); for (O o : valuesList(c)) cleanUp(o); syncClear(c); ret; } //if (!(c instanceof Class)) ret; pcall { // revoke license preCleanUp(c); // unpause setOpt_raw(c, "ping_pauseAll", false); // call custom cleanMeUp() and cleanMeUp_*() functions innerCleanUp(c); // Java spec says finalize should only be called by GC, // but we care to differ. // Edit: Not anymore (illegal access warnings) /*if (isTrue(vmMap_get('callFinalize))) pcallOpt(c, "finalize");*/ // remove all virtual bots (hope this works) L androids = (L) getOpt(c, "record_list"); for (O android : unnull(androids)) pcallOpt(android, "dispose"); // heck we'll dispose anything // sub-cleanup L<WeakReference> classes = cast getOpt(c, "hotwire_classes"); if (classes != null) for (WeakReference cc : classes) pcall { cleanUp(cc.get()); } // interrupt all threads (experimental, they might be doing cleanup?) if (cleanUp_interruptThreads) { L<Thread> threads = registeredThreads(c); if (nempty(threads)) { print("cleanUp: Interrupting " + n2(threads, "thread") + ": " + joinWithComma(allToString(threads))); interruptThreads(threads); } } } setOpt_raw(c, cleaningUp_flag := false); if (c instanceof Class && ((Class) c).getName().equals("main")) retireClassLoader(((Class) c).getClassLoader()); } static void cleanUp(Collection l) { if (l == null) ret; for (O c : l) cleanUp(c); l.clear(); }
download show line numbers debug dex old transpilations
Travelled to 14 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, irmadwmeruwu, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #1001931 | 
| Snippet name: | cleanUp - try to clean up a program/object/class | 
| Eternal ID of this version: | #1001931/40 | 
| Text MD5: | 44ed69c1e537371a40aff24b75609fbf | 
| Transpilation MD5: | 551a918a24aededdb1651ba4f422dd56 | 
| Author: | stefan | 
| Category: | |
| Type: | JavaX fragment (include) | 
| Public (visible to everyone): | Yes | 
| Archived (hidden from active list): | No | 
| Created/modified: | 2022-12-22 14:24:02 | 
| Source code size: | 1983 bytes / 73 lines | 
| Pitched / IR pitched: | No / No | 
| Views / Downloads: | 1563 / 2454 | 
| Version history: | 39 change(s) | 
| Referenced in: | [show references] |