comparison src/luan/modules/ThreadLuan.java @ 1440:4e50b78c7040

logging
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 24 Jan 2020 08:41:37 -0500
parents 67bed466460e
children 83e2585104b9
comparison
equal deleted inserted replaced
1439:67bed466460e 1440:4e50b78c7040
52 exec.execute(runnable(newFn)); 52 exec.execute(runnable(newFn));
53 } 53 }
54 54
55 private static Map<String,Reference<ScheduledFuture>> scheduleds = new ConcurrentHashMap<String,Reference<ScheduledFuture>>(); 55 private static Map<String,Reference<ScheduledFuture>> scheduleds = new ConcurrentHashMap<String,Reference<ScheduledFuture>>();
56 56
57 private static void cancel(ScheduledFuture sf) { 57 private static void cancel(ScheduledFuture sf,String src) {
58 boolean b = sf.cancel(false); 58 boolean b = sf.cancel(false);
59 if( !b ) 59 if( !b )
60 logger.error("cancel failed"); 60 logger.error(src+" cancel failed isCancelled="+sf.isCancelled()+" isDone="+sf.isDone());
61 } 61 }
62 62
63 public static void schedule(LuanFunction fn,LuanTable options) 63 public static void schedule(LuanFunction fn,LuanTable options)
64 throws LuanException 64 throws LuanException
65 { 65 {
75 if( id != null ) { 75 if( id != null ) {
76 Reference<ScheduledFuture> ref = scheduleds.remove(id); 76 Reference<ScheduledFuture> ref = scheduleds.remove(id);
77 if( ref != null ) { 77 if( ref != null ) {
78 ScheduledFuture sf = ref.get(); 78 ScheduledFuture sf = ref.get();
79 if( sf != null ) 79 if( sf != null )
80 cancel(sf); 80 cancel(sf,"id");
81 } 81 }
82 } 82 }
83 Luan luan = fn.luan(); 83 Luan luan = fn.luan();
84 LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE); 84 LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE);
85 final Luan newLuan = (Luan)cloner.clone(luan); 85 final Luan newLuan = (Luan)cloner.clone(luan);
100 scheduler.schedule(r,0L,TimeUnit.MILLISECONDS); 100 scheduler.schedule(r,0L,TimeUnit.MILLISECONDS);
101 return; 101 return;
102 } 102 }
103 Object c = new Object() { 103 Object c = new Object() {
104 protected void finalize() throws Throwable { 104 protected void finalize() throws Throwable {
105 cancel(sf); 105 cancel(sf,"gc");
106 } 106 }
107 }; 107 };
108 luan.registry().put(c,c); // cancel on gc 108 luan.registry().put(c,c); // cancel on gc
109 if( id != null ) 109 if( id != null )
110 scheduleds.put(id,new WeakReference<ScheduledFuture>(sf)); 110 scheduleds.put(id,new WeakReference<ScheduledFuture>(sf));