Mercurial Hosting > luan
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)); |