comparison src/luan/modules/http/HttpServicer.java @ 787:c49980cdece6

use incremental cloning to serve web pages
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 04 Sep 2016 00:18:00 -0600
parents d69d3c51c44e
children 60661a8e738c
comparison
equal deleted inserted replaced
786:fe63c508a177 787:c49980cdece6
44 public static boolean service(LuanState luan,HttpServletRequest request,HttpServletResponse response,String modName) 44 public static boolean service(LuanState luan,HttpServletRequest request,HttpServletResponse response,String modName)
45 throws LuanException 45 throws LuanException
46 { 46 {
47 LuanFunction fn; 47 LuanFunction fn;
48 synchronized(luan) { 48 synchronized(luan) {
49 if( luan.isLocked ) {
50 if( PackageLuan.wouldLoad(luan,"luan:http/Http.luan") || PackageLuan.wouldLoad(luan,modName) ) {
51 luan.isLocked = false;
52 luan.deepenClone(luan,new LuanCloner(LuanCloner.Type.COMPLETE));
53 }
54 }
49 LuanTable module = (LuanTable)PackageLuan.require(luan,"luan:http/Http.luan"); 55 LuanTable module = (LuanTable)PackageLuan.require(luan,"luan:http/Http.luan");
50 LuanTable per_session_pages = (LuanTable)module.rawGet("per_session_pages"); 56 LuanTable per_session_pages = (LuanTable)module.rawGet("per_session_pages");
51 Object mod = PackageLuan.load(luan,modName); 57 Object mod = PackageLuan.load(luan,modName);
52 if( mod==null ) 58 if( mod==null )
53 return false; 59 return false;
63 luan = (LuanState)cloner.clone(luan); 69 luan = (LuanState)cloner.clone(luan);
64 session.setAttribute("luan",luan); 70 session.setAttribute("luan",luan);
65 } 71 }
66 fn = (LuanFunction)PackageLuan.require(luan,modName); 72 fn = (LuanFunction)PackageLuan.require(luan,modName);
67 } else { 73 } else {
68 LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE); 74 LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL);
69 luan = (LuanState)cloner.clone(luan); 75 luan = (LuanState)cloner.clone(luan);
70 fn = (LuanFunction)cloner.get(mod); 76 fn = (LuanFunction)cloner.get(mod);
71 } 77 }
72 } 78 }
73 79