You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by br...@apache.org on 2008/11/29 01:18:43 UTC

svn commit: r721594 - in /httpd/mod_wombat/trunk: mod_wombat.c mod_wombat.h vmprep.c vmprep.h

Author: brianm
Date: Fri Nov 28 16:18:43 2008
New Revision: 721594

URL: http://svn.apache.org/viewvc?rev=721594&view=rev
Log:
remove last usages of old style apw_?getvm(...) and comment out the code cache so things compile until code cache is reenabled

Modified:
    httpd/mod_wombat/trunk/mod_wombat.c
    httpd/mod_wombat/trunk/mod_wombat.h
    httpd/mod_wombat/trunk/vmprep.c
    httpd/mod_wombat/trunk/vmprep.h

Modified: httpd/mod_wombat/trunk/mod_wombat.c
URL: http://svn.apache.org/viewvc/httpd/mod_wombat/trunk/mod_wombat.c?rev=721594&r1=721593&r2=721594&view=diff
==============================================================================
--- httpd/mod_wombat/trunk/mod_wombat.c (original)
+++ httpd/mod_wombat/trunk/mod_wombat.c Fri Nov 28 16:18:43 2008
@@ -126,7 +126,6 @@
                                           cfg->package_cpaths,
                                           &wombat_open_callback, NULL); 
                                           
-        /* lua_State *L = apw_rgetvm(r, spec); */
         ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "got a vm!");
         if (!L) {
             /* TODO annotate spec with failure reason */
@@ -188,7 +187,8 @@
 /** harnesses for magic hooks **/
 
 static int wombat_request_rec_hook_harness(request_rec *r, const char *name) {
-
+    char *fixed_filename;
+    
     const apw_dir_cfg* cfg = (apw_dir_cfg*) ap_get_module_config(r->per_dir_config,
                                                                        &wombat_module);
     apr_array_header_t *hook_specs = apr_hash_get(cfg->hooks, name, APR_HASH_KEY_STRING);
@@ -206,20 +206,32 @@
             spec->bytecode_len = hook_spec->bytecode_len;
             spec->pool = r->pool;
             
-            lua_State* L = apw_rgetvm(r, spec);
+            /*
+            const apw_dir_cfg* cfg = ap_get_module_config(r->per_dir_config, &wombat_module);
+            lua_State *L =  apw_get_lua_state(r->pool,
+                                              d->spec->file,
+                                              cfg->package_paths,
+                                              cfg->package_cpaths,
+                                              &wombat_open_callback, NULL);
+            */            
+            apw_server_cfg *server_cfg = ap_get_module_config(r->server->module_config, &wombat_module);
+            apr_filepath_merge(&fixed_filename, server_cfg->root_path, spec->file, APR_FILEPATH_NOTRELATIVE, r->pool);
+            lua_State *L =  apw_get_lua_state(r->pool,
+                                              fixed_filename,
+                                              cfg->package_paths,
+                                              cfg->package_cpaths,
+                                              &wombat_open_callback, NULL);
+            
+            
+            
             if (!L) {
+                ap_log_rerror(APLOG_MARK, APLOG_CRIT, 0, r, "wombat: Failed to obtain lua interpreter for %s %s",
+                              hook_spec->function_name,
+                              hook_spec->file_name);
                 return 500;
             }
 
             if (hook_spec->function_name != NULL) {
-                /* 'eval' the base code */
-                if (lua_pcall(L, 0, LUA_MULTRET, 0)) {
-                    report_lua_error(L, r);
-                    return 500;
-                }
-            }
-
-            if (hook_spec->function_name != NULL) {
                 lua_getglobal(L, hook_spec->function_name);
                 if (!lua_isfunction(L, -1)) {
                     ap_log_rerror(APLOG_MARK, APLOG_CRIT, 0, r, "wombat: Unable to find function %s in %s",

Modified: httpd/mod_wombat/trunk/mod_wombat.h
URL: http://svn.apache.org/viewvc/httpd/mod_wombat/trunk/mod_wombat.h?rev=721594&r1=721593&r2=721594&view=diff
==============================================================================
--- httpd/mod_wombat/trunk/mod_wombat.h (original)
+++ httpd/mod_wombat/trunk/mod_wombat.h Fri Nov 28 16:18:43 2008
@@ -99,7 +99,7 @@
     apr_thread_rwlock_t *vm_reslists_lock;
 
     /* value of the LuaRoot directive */
-    const char *root_path;    
+    const char *root_path;  
 } apw_server_cfg;
 
 typedef struct {

Modified: httpd/mod_wombat/trunk/vmprep.c
URL: http://svn.apache.org/viewvc/httpd/mod_wombat/trunk/vmprep.c?rev=721594&r1=721593&r2=721594&view=diff
==============================================================================
--- httpd/mod_wombat/trunk/vmprep.c (original)
+++ httpd/mod_wombat/trunk/vmprep.c Fri Nov 28 16:18:43 2008
@@ -23,7 +23,7 @@
 #include "apr_file_info.h"
 
 /* forward dec'l from this file */
-static int load_file(apr_pool_t *working_pool, lua_State* L, const apw_code_cache* cfg, apw_vm_spec *spec);
+// static int load_file(apr_pool_t *working_pool, lua_State* L, const apw_code_cache* cfg, apw_vm_spec *spec);
 
 void pstack_dump(lua_State* L, apr_pool_t* r, int level, const char* msg) {
     ap_log_perror(APLOG_MARK, level, 0, r, "Lua Stack Dump: [%s]", msg);
@@ -257,424 +257,423 @@
   lua_pop(L, 1); /* pop "package" off the stack     */
 }
 
-
 /**
  * pool is a working pool
  */
-static lua_State* create_vm(apw_vm_spec *spec, 
-                            apw_code_cache *cache, 
-                            apr_pool_t *pool) {
-    lua_State* L =  luaL_newstate();
-    luaL_openlibs(L);
-    
-    apw_run_wombat_open(L, pool);
-
-    munge_path(L, "path", "?.lua", "./?.lua", pool, spec->package_paths, spec->file);
-    munge_path(L, "cpath", "?.so", "./?.so", pool, spec->package_cpaths, spec->file);
-    
-    if (load_file(pool, L, cache, spec)) {
-        ap_log_perror(APLOG_MARK, APLOG_ERR, 0, pool, 
-                     "Unable to compile Lua file '%s' because of '%s'",
-                     spec->file, luaL_checkstring(L, -1));
-        return NULL;
-    }    
-    return L;
-}
-
-typedef struct {
-    server_rec *server;
-    apw_vm_spec *spec;
-} server_vm_params;
-
-
-static apr_status_t server_vm_ctor(void **resource, void *_params, apr_pool_t *pool) {
-    server_vm_params *params = _params;
-    apw_server_cfg *cfg = ap_get_module_config(params->server->module_config, &wombat_module);    
-    lua_State *L = create_vm(params->spec, cfg->code_cache, pool);
-    *resource = L;
-    /* ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, params->server, "L is %d", (int)L); */
-    return OK;
-}
-
-static apr_status_t server_vm_dtor(void *resource, void *_params, apr_pool_t *pool) {
-    return OK;
-}
-
-typedef struct {
-    apr_reslist_t *reslist;
-    lua_State *L;
-} server_release_t;
-
-static apr_status_t release_server_vm(void *l) {
-    server_release_t *srt = l;
-    apr_reslist_release(srt->reslist, srt->L);
-    return APR_SUCCESS;
-}
+// static lua_State* create_vm(apw_vm_spec *spec, 
+//                             apw_code_cache *cache, 
+//                             apr_pool_t *pool) {
+//     lua_State* L =  luaL_newstate();
+//     luaL_openlibs(L);
+//     
+//     apw_run_wombat_open(L, pool);
+// 
+//     munge_path(L, "path", "?.lua", "./?.lua", pool, spec->package_paths, spec->file);
+//     munge_path(L, "cpath", "?.so", "./?.so", pool, spec->package_cpaths, spec->file);
+//     
+//     if (load_file(pool, L, cache, spec)) {
+//         ap_log_perror(APLOG_MARK, APLOG_ERR, 0, pool, 
+//                      "Unable to compile Lua file '%s' because of '%s'",
+//                      spec->file, luaL_checkstring(L, -1));
+//         return NULL;
+//     }    
+//     return L;
+// }
+
+// typedef struct {
+//     server_rec *server;
+//     apw_vm_spec *spec;
+// } server_vm_params;
+
+
+// static apr_status_t server_vm_ctor(void **resource, void *_params, apr_pool_t *pool) {
+//     server_vm_params *params = _params;
+//     apw_server_cfg *cfg = ap_get_module_config(params->server->module_config, &wombat_module);    
+//     lua_State *L = create_vm(params->spec, cfg->code_cache, pool);
+//     *resource = L;
+//     /* ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, params->server, "L is %d", (int)L); */
+//     return OK;
+// }
+// 
+// static apr_status_t server_vm_dtor(void *resource, void *_params, apr_pool_t *pool) {
+//     return OK;
+// }
+// 
+// typedef struct {
+//     apr_reslist_t *reslist;
+//     lua_State *L;
+// } server_release_t;
+// 
+// static apr_status_t release_server_vm(void *l) {
+//     server_release_t *srt = l;
+//     apr_reslist_release(srt->reslist, srt->L);
+//     return APR_SUCCESS;
+// }
 
 /* Initially we will just use a resource list keyed to the file name */
-static lua_State* get_server_vm(server_rec *server, apw_vm_spec *spec) {
-    apr_status_t rv;
-    apw_server_cfg *cfg = ap_get_module_config(server->module_config, &wombat_module);
-        
-    apr_thread_rwlock_rdlock(cfg->vm_reslists_lock);
-    apr_reslist_t *rlist = apr_hash_get(cfg->vm_reslists, spec->file, APR_HASH_KEY_STRING);
-    apr_thread_rwlock_unlock(cfg->vm_reslists_lock);
-    if (!rlist) {
-        apr_thread_rwlock_wrlock(cfg->vm_reslists_lock);    
-        /* double checked lock (works in C :-) */
-        rlist = apr_hash_get(cfg->vm_reslists, spec->file, APR_HASH_KEY_STRING);
-        if (!rlist) {
-            ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server, "Creating RESLIST");
-    
-            server_vm_params *params = apr_palloc(server->process->pconf, sizeof(server_vm_params));
-            
-            params->server = server;
-            params->spec = apr_pcalloc(server->process->pconf, sizeof(apw_vm_spec));
-            params->spec->file = apr_pstrdup(server->process->pconf, spec->file);
-            params->spec->code_cache_style = spec->code_cache_style;
-            params->spec->scope = APW_SCOPE_SERVER;
-            params->spec->package_paths = spec->package_paths;
-            params->spec->package_cpaths = spec->package_cpaths;
-            ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server, "Creating reslist for %s", spec->file);
-            rv = apr_reslist_create(&rlist,      /* the list */
-                                    10, 100, 100, /* min, soft max, hard max */
-                                    0,           /* TTL */
-                                    server_vm_ctor,
-                                    server_vm_dtor,
-                                    params,
-                                    server->process->pconf);
-
-            apr_hash_set(cfg->vm_reslists, params->spec->file, APR_HASH_KEY_STRING, (void*)rlist);
-        }
-        apr_thread_rwlock_unlock(cfg->vm_reslists_lock);
-    }
-    lua_State *L;
-    apr_reslist_acquire(rlist, (void*)&L);
-    
-    server_release_t *srt = apr_palloc(spec->pool, sizeof(server_release_t));
-    srt->reslist = rlist;
-    srt->L = L;
-    apr_pool_cleanup_register(spec->pool, srt, release_server_vm, apr_pool_cleanup_null);
-    
-    /* apr_pool_cleanup_register(r->pool, L, cleanup_lua, apr_pool_cleanup_null); */
-    
-    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server, "Acquired lua_State %p", L);
-    return L;
-}
+// static lua_State* get_server_vm(server_rec *server, apw_vm_spec *spec) {
+//     apr_status_t rv;
+//     apw_server_cfg *cfg = ap_get_module_config(server->module_config, &wombat_module);
+//         
+//     apr_thread_rwlock_rdlock(cfg->vm_reslists_lock);
+//     apr_reslist_t *rlist = apr_hash_get(cfg->vm_reslists, spec->file, APR_HASH_KEY_STRING);
+//     apr_thread_rwlock_unlock(cfg->vm_reslists_lock);
+//     if (!rlist) {
+//         apr_thread_rwlock_wrlock(cfg->vm_reslists_lock);    
+//         /* double checked lock (works in C :-) */
+//         rlist = apr_hash_get(cfg->vm_reslists, spec->file, APR_HASH_KEY_STRING);
+//         if (!rlist) {
+//             ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server, "Creating RESLIST");
+//     
+//             server_vm_params *params = apr_palloc(server->process->pconf, sizeof(server_vm_params));
+//             
+//             params->server = server;
+//             params->spec = apr_pcalloc(server->process->pconf, sizeof(apw_vm_spec));
+//             params->spec->file = apr_pstrdup(server->process->pconf, spec->file);
+//             params->spec->code_cache_style = spec->code_cache_style;
+//             params->spec->scope = APW_SCOPE_SERVER;
+//             params->spec->package_paths = spec->package_paths;
+//             params->spec->package_cpaths = spec->package_cpaths;
+//             ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server, "Creating reslist for %s", spec->file);
+//             rv = apr_reslist_create(&rlist,      /* the list */
+//                                     10, 100, 100, /* min, soft max, hard max */
+//                                     0,           /* TTL */
+//                                     server_vm_ctor,
+//                                     server_vm_dtor,
+//                                     params,
+//                                     server->process->pconf);
+// 
+//             apr_hash_set(cfg->vm_reslists, params->spec->file, APR_HASH_KEY_STRING, (void*)rlist);
+//         }
+//         apr_thread_rwlock_unlock(cfg->vm_reslists_lock);
+//     }
+//     lua_State *L;
+//     apr_reslist_acquire(rlist, (void*)&L);
+//     
+//     server_release_t *srt = apr_palloc(spec->pool, sizeof(server_release_t));
+//     srt->reslist = rlist;
+//     srt->L = L;
+//     apr_pool_cleanup_register(spec->pool, srt, release_server_vm, apr_pool_cleanup_null);
+//     
+//     /* apr_pool_cleanup_register(r->pool, L, cleanup_lua, apr_pool_cleanup_null); */
+//     
+//     ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server, "Acquired lua_State %p", L);
+//     return L;
+// }
 
 /* Initially we will just use a resource list keyed to the file name */
-static lua_State* get_request_vm(request_rec *r, apw_vm_spec *spec) {
-    /* apr_status_t rv; */
-    apw_request_cfg *cfg = ap_get_module_config(r->request_config, &wombat_module);
-    apw_server_cfg *server_cfg = ap_get_module_config(r->server->module_config, &wombat_module);    
-    
-    ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "got module config! %p", cfg);
-    lua_State *L = apr_hash_get(cfg->request_scoped_vms, spec->file, APR_HASH_KEY_STRING);
-    if (!L) {
-        L = create_vm(spec, server_cfg->code_cache, r->pool);
-        apr_hash_set(cfg->request_scoped_vms, spec->file, APR_HASH_KEY_STRING, L);
-    }
-    return L;
-}
-
-lua_State* apw_rgetvm(request_rec *r, apw_vm_spec *spec) {
-    apr_status_t rv;
-    const apw_dir_cfg* cfg = ap_get_module_config(r->per_dir_config, &wombat_module);
-    apw_server_cfg *server_cfg = ap_get_module_config(r->server->module_config, &wombat_module);
-    char *fixed_filename;
-    rv = apr_filepath_merge(&fixed_filename, server_cfg->root_path, spec->file, APR_FILEPATH_NOTRELATIVE, r->pool);
-    if (rv != APR_SUCCESS) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, "Unable to build full path to file, %s", spec->file);
-        return NULL;
-    }
-    spec->file = fixed_filename;
-    lua_State* L;
-    switch (spec->scope) {            
-        case APW_SCOPE_REQUEST: 
-            spec->package_paths = cfg->package_paths;
-            spec->package_cpaths = cfg->package_cpaths;
-            spec->pool = r->pool;
-            L = get_request_vm(r, spec);           
-            return L;
-            return NULL;
-
-        case APW_SCOPE_CONN:
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "Conn Scoped Lua VMs not implemented yet");
-            return NULL;
-
-        case APW_SCOPE_SERVER:
-            spec->package_paths = cfg->package_paths;
-            spec->package_cpaths = cfg->package_cpaths;
-            spec->pool = r->pool;
-            L = get_server_vm(r->server, spec);           
-            return L;
-
-        default:
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "Unknown Lua VM scope specified, using 'once'");
-            /* fall through on purpose */
-        case APW_SCOPE_ONCE:
-            spec->package_paths = cfg->package_paths;
-            spec->package_cpaths = cfg->package_cpaths;
-            L =  create_vm(spec, server_cfg->code_cache, r->pool);
-            if (spec->pool == NULL) {
-                apr_pool_cleanup_register(r->pool, L, cleanup_lua, apr_pool_cleanup_null);                
-            }
-            apr_pool_cleanup_register(spec->pool, L, cleanup_lua, apr_pool_cleanup_null);
-            break;
-    }
-    
-    return L;
-}
+// static lua_State* get_request_vm(request_rec *r, apw_vm_spec *spec) {
+//     /* apr_status_t rv; */
+//     apw_request_cfg *cfg = ap_get_module_config(r->request_config, &wombat_module);
+//     apw_server_cfg *server_cfg = ap_get_module_config(r->server->module_config, &wombat_module);    
+//     
+//     ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "got module config! %p", cfg);
+//     lua_State *L = apr_hash_get(cfg->request_scoped_vms, spec->file, APR_HASH_KEY_STRING);
+//     if (!L) {
+//         L = create_vm(spec, server_cfg->code_cache, r->pool);
+//         apr_hash_set(cfg->request_scoped_vms, spec->file, APR_HASH_KEY_STRING, L);
+//     }
+//     return L;
+// }
+
+// lua_State* apw_rgetvm(request_rec *r, apw_vm_spec *spec) {
+//     apr_status_t rv;
+//     const apw_dir_cfg* cfg = ap_get_module_config(r->per_dir_config, &wombat_module);
+//     apw_server_cfg *server_cfg = ap_get_module_config(r->server->module_config, &wombat_module);
+//     char *fixed_filename;
+//     rv = apr_filepath_merge(&fixed_filename, server_cfg->root_path, spec->file, APR_FILEPATH_NOTRELATIVE, r->pool);
+//     if (rv != APR_SUCCESS) {
+//         ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, "Unable to build full path to file, %s", spec->file);
+//         return NULL;
+//     }
+//     spec->file = fixed_filename;
+//     lua_State* L;
+//     switch (spec->scope) {            
+//         case APW_SCOPE_REQUEST: 
+//             spec->package_paths = cfg->package_paths;
+//             spec->package_cpaths = cfg->package_cpaths;
+//             spec->pool = r->pool;
+//             L = get_request_vm(r, spec);           
+//             return L;
+//             return NULL;
+// 
+//         case APW_SCOPE_CONN:
+//             ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "Conn Scoped Lua VMs not implemented yet");
+//             return NULL;
+// 
+//         case APW_SCOPE_SERVER:
+//             spec->package_paths = cfg->package_paths;
+//             spec->package_cpaths = cfg->package_cpaths;
+//             spec->pool = r->pool;
+//             L = get_server_vm(r->server, spec);           
+//             return L;
+// 
+//         default:
+//             ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "Unknown Lua VM scope specified, using 'once'");
+//             /* fall through on purpose */
+//         case APW_SCOPE_ONCE:
+//             spec->package_paths = cfg->package_paths;
+//             spec->package_cpaths = cfg->package_cpaths;
+//             L =  create_vm(spec, server_cfg->code_cache, r->pool);
+//             if (spec->pool == NULL) {
+//                 apr_pool_cleanup_register(r->pool, L, cleanup_lua, apr_pool_cleanup_null);                
+//             }
+//             apr_pool_cleanup_register(spec->pool, L, cleanup_lua, apr_pool_cleanup_null);
+//             break;
+//     }
+//     
+//     return L;
+// }
 
 /* returns NULL if the spec requires a request scope */
-lua_State* apw_cgetvm(conn_rec *conn, apw_vm_spec *spec) {
-    
-    return NULL;
-}
+// lua_State* apw_cgetvm(conn_rec *conn, apw_vm_spec *spec) {
+//     
+//     return NULL;
+// }
 
 /**
  * TODO Redo to make use of the create_vm
  */
-lua_State* apw_sgetvm(server_rec *server, apw_vm_spec *spec) {
-    apr_status_t rv;
-    if (spec->scope == APW_SCOPE_REQUEST || spec->scope == APW_SCOPE_CONN) {
-        return NULL;
-    }
-    
-    apw_server_cfg *server_cfg = ap_get_module_config(server->module_config, &wombat_module);
-    char *fixed_filename;
-    rv = apr_filepath_merge(&fixed_filename, server_cfg->root_path, spec->file, APR_FILEPATH_NOTRELATIVE, 
-                            server->process->pconf);
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, rv, server, "Unable to build full path to file, %s", spec->file);
-        return NULL;
-    }
-    spec->file = fixed_filename;
-    
-    apr_pool_t *pool = NULL;
-    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server, "ALLOCATING A LUA");
-    /* TODO change to use load_file */
-    lua_State* L = luaL_newstate();
-    luaL_openlibs(L);
-    apw_load_apache2_lmodule(L);
-    apw_load_config_lmodule(L);
-    
-    if (luaL_loadfile(L, spec->file)) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, 
-                     "Unable to compile Lua file '%s' because of '%s'",
-                     spec->file, luaL_checkstring(L, -1));
-        return NULL;
-    }
-    
-    if (lua_pcall(L, 0, LUA_MULTRET, 0)) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, 
-                     "Unable to compile Lua file '%s' because of '%s'",
-                     spec->file, luaL_checkstring(L, -1));
-        return NULL;
-    }
-    
-    switch (spec->scope) {
-        case APW_SCOPE_ONCE:
-            if (spec->pool == NULL) {
-                ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, 
-                             "You must provide a pool for APW_SCOPE_ONCE");                
-                lua_close(L);
-                return NULL;
-            }
-            pool = spec->pool;
-            break;
-            
-        case APW_SCOPE_REQUEST: 
-            break;
-
-        case APW_SCOPE_CONN: 
-            break;
-
-        case APW_SCOPE_SERVER: 
-            lua_close(L);
-            ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, 
-                         "Server Scoped Lua VMs not implemented yet");
-            return NULL;
-
-        default:
-            pool = spec->pool;
-            ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, 
-                         "Unknown Lua VM scope specified, using 'once'");
-    }
-    
-    apr_pool_cleanup_register(pool, L, cleanup_lua, apr_pool_cleanup_null);
-    return L;
-}
+// lua_State* apw_sgetvm(server_rec *server, apw_vm_spec *spec) {
+//     apr_status_t rv;
+//     if (spec->scope == APW_SCOPE_REQUEST || spec->scope == APW_SCOPE_CONN) {
+//         return NULL;
+//     }
+//     
+//     apw_server_cfg *server_cfg = ap_get_module_config(server->module_config, &wombat_module);
+//     char *fixed_filename;
+//     rv = apr_filepath_merge(&fixed_filename, server_cfg->root_path, spec->file, APR_FILEPATH_NOTRELATIVE, 
+//                             server->process->pconf);
+//     if (rv != APR_SUCCESS) {
+//         ap_log_error(APLOG_MARK, APLOG_ERR, rv, server, "Unable to build full path to file, %s", spec->file);
+//         return NULL;
+//     }
+//     spec->file = fixed_filename;
+//     
+//     apr_pool_t *pool = NULL;
+//     ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server, "ALLOCATING A LUA");
+//     /* TODO change to use load_file */
+//     lua_State* L = luaL_newstate();
+//     luaL_openlibs(L);
+//     apw_load_apache2_lmodule(L);
+//     apw_load_config_lmodule(L);
+//     
+//     if (luaL_loadfile(L, spec->file)) {
+//         ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, 
+//                      "Unable to compile Lua file '%s' because of '%s'",
+//                      spec->file, luaL_checkstring(L, -1));
+//         return NULL;
+//     }
+//     
+//     if (lua_pcall(L, 0, LUA_MULTRET, 0)) {
+//         ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, 
+//                      "Unable to compile Lua file '%s' because of '%s'",
+//                      spec->file, luaL_checkstring(L, -1));
+//         return NULL;
+//     }
+//     
+//     switch (spec->scope) {
+//         case APW_SCOPE_ONCE:
+//             if (spec->pool == NULL) {
+//                 ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, 
+//                              "You must provide a pool for APW_SCOPE_ONCE");                
+//                 lua_close(L);
+//                 return NULL;
+//             }
+//             pool = spec->pool;
+//             break;
+//             
+//         case APW_SCOPE_REQUEST: 
+//             break;
+// 
+//         case APW_SCOPE_CONN: 
+//             break;
+// 
+//         case APW_SCOPE_SERVER: 
+//             lua_close(L);
+//             ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, 
+//                          "Server Scoped Lua VMs not implemented yet");
+//             return NULL;
+// 
+//         default:
+//             pool = spec->pool;
+//             ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, 
+//                          "Unknown Lua VM scope specified, using 'once'");
+//     }
+//     
+//     apr_pool_cleanup_register(pool, L, cleanup_lua, apr_pool_cleanup_null);
+//     return L;
+// }
 
 /* represents a cache entry */
-typedef struct {
-    apr_array_header_t *parts; /* <part_t> */
-    apr_time_t mtime;
-    apr_pool_t *pool;
-} code_cache_entry;
-
-typedef struct {
-    apr_pool_t *pool;
-    apr_array_header_t *parts; /* <part_t> */
-} dumper_t;
-
-typedef struct {
-    apr_array_header_t* parts;
-    int idx;
-    request_rec* r;
-} loader_t;
-
-typedef struct {
-    const void* chunk;
-    size_t sz;
-} part_t;
-
-static int wlua_dumper(lua_State *L, const void* p, size_t sz, void* ud) {
-    dumper_t* d = (dumper_t*)ud;    
-    part_t* part = apr_palloc(d->pool, sizeof(part_t));
-    void* mine = apr_palloc(d->pool, sz);
-    memcpy(mine, p, sz);
-    part->chunk = mine;
-    part->sz = sz;
-    *(const part_t**)apr_array_push(d->parts) = part;
-    return 0;
-}
-
-static const char* wlua_loader(lua_State* L, void* data, size_t* size) {
-    loader_t* l = (loader_t*) data;
-    /* ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, l->r, "part count %d", l->parts->nelts); */
-    if (l->idx == l->parts->nelts) {
-        return NULL;
-    }
-    part_t* part = ((part_t**)l->parts->elts)[l->idx++];
-    *size = part->sz;
-    /* ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, l->r, "got part of size %lu", *size); */
-    return part->chunk;
-}
-
-static int load_file(apr_pool_t *working_pool, lua_State* L, const apw_code_cache* cfg, apw_vm_spec *spec) {
-    int rs;
-
-    if (spec->bytecode_len != 0) {
-        rs = luaL_loadbuffer(L, spec->bytecode, spec->bytecode_len, spec->file);
-        if (rs) {
-            ap_log_perror(APLOG_MARK, APLOG_DEBUG, rs, working_pool, "Unable to load %s from buffer", spec->file);
-            return rs;
-        }
-    }
-    else if (spec->code_cache_style != APW_CODE_CACHE_NEVER) {
-        /* start code caching magic */
-        apr_thread_rwlock_rdlock(cfg->compiled_files_lock);
-        code_cache_entry *cache = apr_hash_get(cfg->compiled_files, spec->file, APR_HASH_KEY_STRING);
-        apr_thread_rwlock_unlock(cfg->compiled_files_lock);
-
-        int stale = 0;
-        apr_finfo_t *finfo = NULL;
-        if (cache == NULL || spec->code_cache_style == APW_CODE_CACHE_STAT) {
-            ap_log_perror(APLOG_MARK, APLOG_DEBUG, 0, working_pool, "stating %s", spec->file);
-
-            finfo = apr_palloc(working_pool, sizeof(apr_finfo_t));
-            apr_stat(finfo, spec->file, APR_FINFO_MTIME, working_pool);
-
-            /* has the file been modified or is this the first time we load the file? */
-            if (cache == NULL || finfo->mtime > cache->mtime) {
-                /* we're expired */
-                ap_log_perror(APLOG_MARK, APLOG_DEBUG, 0, working_pool, "file is stale: %s ", spec->file);
-                stale = 1;
-            }
-        }    
-
-        if (!stale) {
-            ap_log_perror(APLOG_MARK, APLOG_DEBUG, 0, working_pool, "loading from cache: %s", spec->file);
-
-            loader_t* l = apr_palloc(working_pool, sizeof(loader_t));
-            apr_thread_rwlock_rdlock(cfg->compiled_files_lock);
-            l->parts = cache->parts;
-            l->idx = 0;
-            if ((rs = lua_load(L, wlua_loader, l, spec->file))) {
-                apr_thread_rwlock_unlock(cfg->compiled_files_lock);                
-                switch (rs) {
-                    case LUA_ERRSYNTAX: {
-                        ap_log_perror(APLOG_MARK, APLOG_WARNING, 0, working_pool, 
-                            "syntax error on compiled [%s] from cache", spec->file);
-                        return rs;
-                    }
-                    case LUA_ERRMEM: {
-                        ap_log_perror(APLOG_MARK, APLOG_WARNING, 0, working_pool, 
-                            "memory error on compiled [%s] from cache", spec->file);
-                        return rs;
-                    }
-                    default: {
-                        ap_log_perror(APLOG_MARK, APLOG_WARNING, 0, working_pool, 
-                            "other error, %d, on compiled [%s] from cache", rs, spec->file);
-                        return rs;
-                    }
-                }
-                return rs;
-            }
-            else {
-                apr_thread_rwlock_unlock(cfg->compiled_files_lock);
-            }
-        }
-        else {
-            ap_log_perror(APLOG_MARK, APLOG_DEBUG, 0, working_pool, "loading & caching: %s", spec->file);
-        
-            if ((rs = luaL_loadfile(L, spec->file))) {
-                return rs;
-            }
-            
-            int is_new = 0;
-            if (!cache) { 
-                /* allocate a new code_cache_entry from the cfg pool. Since entries are reused
-                 * when files are re-loaded and we don't evict entries from the cache, 
-                 * we don't need to care about de-allocation. 
-                 */
-                cache = apr_palloc(cfg->pool, sizeof(code_cache_entry));
-                is_new = 1;
-            }
-            
-            
-            apr_pool_t *mp;
-            apr_pool_create(&mp, cfg->pool);  /* pool from which everything in this code_cache_entry
-                                               * will be allocated */
-
-            dumper_t* d = apr_palloc(working_pool, sizeof(dumper_t));
-            d->pool = mp;
-            d->parts = apr_array_make(mp, 250, sizeof(part_t*));
-            lua_dump(L, wlua_dumper, d);
-
-            apr_thread_rwlock_wrlock(cfg->compiled_files_lock);
-            
-            if (is_new) {
-                /* we copy the filename into a string allocated from the cfg pool. apr_hash keeps
-                 * pointers to keys and values, and we need the key to survive beyond the request lifetime
-                 */
-                const char* key = apr_pstrdup(cfg->pool, spec->file);
-                apr_hash_set(cfg->compiled_files, key, APR_HASH_KEY_STRING, cache);
-            }
-            else {
-                apr_pool_clear(cache->pool);
-            }
-
-            cache->parts = d->parts;
-            cache->pool = d->pool; 
-            cache->mtime = finfo->mtime;
-            
-            apr_thread_rwlock_unlock(cfg->compiled_files_lock);
-
-            /* end code caching magic             */
-        }
-    }
-    else { /* CODE_CACHE_NEVER */
-        ap_log_perror(APLOG_MARK, APLOG_DEBUG, 0, working_pool, "loading: %s", spec->file);
-        
-        if ((rs = luaL_loadfile(L, spec->file))) {
-            return rs;
-        }
-    }
-
-    return 0;
-}
+// typedef struct {
+//     apr_array_header_t *parts; /* <part_t> */
+//     apr_time_t mtime;
+//     apr_pool_t *pool;
+// } code_cache_entry;
+// 
+// typedef struct {
+//     apr_pool_t *pool;
+//     apr_array_header_t *parts; /* <part_t> */
+// } dumper_t;
+// 
+// typedef struct {
+//     apr_array_header_t* parts;
+//     int idx;
+//     request_rec* r;
+// } loader_t;
+// 
+// typedef struct {
+//     const void* chunk;
+//     size_t sz;
+// } part_t;
+// 
+// static int wlua_dumper(lua_State *L, const void* p, size_t sz, void* ud) {
+//     dumper_t* d = (dumper_t*)ud;    
+//     part_t* part = apr_palloc(d->pool, sizeof(part_t));
+//     void* mine = apr_palloc(d->pool, sz);
+//     memcpy(mine, p, sz);
+//     part->chunk = mine;
+//     part->sz = sz;
+//     *(const part_t**)apr_array_push(d->parts) = part;
+//     return 0;
+// }
+// 
+// static const char* wlua_loader(lua_State* L, void* data, size_t* size) {
+//     loader_t* l = (loader_t*) data;
+//     /* ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, l->r, "part count %d", l->parts->nelts); */
+//     if (l->idx == l->parts->nelts) {
+//         return NULL;
+//     }
+//     part_t* part = ((part_t**)l->parts->elts)[l->idx++];
+//     *size = part->sz;
+//     /* ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, l->r, "got part of size %lu", *size); */
+//     return part->chunk;
+// }
+
+// static int load_file(apr_pool_t *working_pool, lua_State* L, const apw_code_cache* cfg, apw_vm_spec *spec) {
+//     int rs;
+// 
+//     if (spec->bytecode_len != 0) {
+//         rs = luaL_loadbuffer(L, spec->bytecode, spec->bytecode_len, spec->file);
+//         if (rs) {
+//             ap_log_perror(APLOG_MARK, APLOG_DEBUG, rs, working_pool, "Unable to load %s from buffer", spec->file);
+//             return rs;
+//         }
+//     }
+//     else if (spec->code_cache_style != APW_CODE_CACHE_NEVER) {
+//         /* start code caching magic */
+//         apr_thread_rwlock_rdlock(cfg->compiled_files_lock);
+//         code_cache_entry *cache = apr_hash_get(cfg->compiled_files, spec->file, APR_HASH_KEY_STRING);
+//         apr_thread_rwlock_unlock(cfg->compiled_files_lock);
+// 
+//         int stale = 0;
+//         apr_finfo_t *finfo = NULL;
+//         if (cache == NULL || spec->code_cache_style == APW_CODE_CACHE_STAT) {
+//             ap_log_perror(APLOG_MARK, APLOG_DEBUG, 0, working_pool, "stating %s", spec->file);
+// 
+//             finfo = apr_palloc(working_pool, sizeof(apr_finfo_t));
+//             apr_stat(finfo, spec->file, APR_FINFO_MTIME, working_pool);
+// 
+//             /* has the file been modified or is this the first time we load the file? */
+//             if (cache == NULL || finfo->mtime > cache->mtime) {
+//                 /* we're expired */
+//                 ap_log_perror(APLOG_MARK, APLOG_DEBUG, 0, working_pool, "file is stale: %s ", spec->file);
+//                 stale = 1;
+//             }
+//         }    
+// 
+//         if (!stale) {
+//             ap_log_perror(APLOG_MARK, APLOG_DEBUG, 0, working_pool, "loading from cache: %s", spec->file);
+// 
+//             loader_t* l = apr_palloc(working_pool, sizeof(loader_t));
+//             apr_thread_rwlock_rdlock(cfg->compiled_files_lock);
+//             l->parts = cache->parts;
+//             l->idx = 0;
+//             if ((rs = lua_load(L, wlua_loader, l, spec->file))) {
+//                 apr_thread_rwlock_unlock(cfg->compiled_files_lock);                
+//                 switch (rs) {
+//                     case LUA_ERRSYNTAX: {
+//                         ap_log_perror(APLOG_MARK, APLOG_WARNING, 0, working_pool, 
+//                             "syntax error on compiled [%s] from cache", spec->file);
+//                         return rs;
+//                     }
+//                     case LUA_ERRMEM: {
+//                         ap_log_perror(APLOG_MARK, APLOG_WARNING, 0, working_pool, 
+//                             "memory error on compiled [%s] from cache", spec->file);
+//                         return rs;
+//                     }
+//                     default: {
+//                         ap_log_perror(APLOG_MARK, APLOG_WARNING, 0, working_pool, 
+//                             "other error, %d, on compiled [%s] from cache", rs, spec->file);
+//                         return rs;
+//                     }
+//                 }
+//                 return rs;
+//             }
+//             else {
+//                 apr_thread_rwlock_unlock(cfg->compiled_files_lock);
+//             }
+//         }
+//         else {
+//             ap_log_perror(APLOG_MARK, APLOG_DEBUG, 0, working_pool, "loading & caching: %s", spec->file);
+//         
+//             if ((rs = luaL_loadfile(L, spec->file))) {
+//                 return rs;
+//             }
+//             
+//             int is_new = 0;
+//             if (!cache) { 
+//                 /* allocate a new code_cache_entry from the cfg pool. Since entries are reused
+//                  * when files are re-loaded and we don't evict entries from the cache, 
+//                  * we don't need to care about de-allocation. 
+//                  */
+//                 cache = apr_palloc(cfg->pool, sizeof(code_cache_entry));
+//                 is_new = 1;
+//             }
+//             
+//             
+//             apr_pool_t *mp;
+//             apr_pool_create(&mp, cfg->pool);  /* pool from which everything in this code_cache_entry
+//                                                * will be allocated */
+// 
+//             dumper_t* d = apr_palloc(working_pool, sizeof(dumper_t));
+//             d->pool = mp;
+//             d->parts = apr_array_make(mp, 250, sizeof(part_t*));
+//             lua_dump(L, wlua_dumper, d);
+// 
+//             apr_thread_rwlock_wrlock(cfg->compiled_files_lock);
+//             
+//             if (is_new) {
+//                 /* we copy the filename into a string allocated from the cfg pool. apr_hash keeps
+//                  * pointers to keys and values, and we need the key to survive beyond the request lifetime
+//                  */
+//                 const char* key = apr_pstrdup(cfg->pool, spec->file);
+//                 apr_hash_set(cfg->compiled_files, key, APR_HASH_KEY_STRING, cache);
+//             }
+//             else {
+//                 apr_pool_clear(cache->pool);
+//             }
+// 
+//             cache->parts = d->parts;
+//             cache->pool = d->pool; 
+//             cache->mtime = finfo->mtime;
+//             
+//             apr_thread_rwlock_unlock(cfg->compiled_files_lock);
+// 
+//             /* end code caching magic             */
+//         }
+//     }
+//     else { /* CODE_CACHE_NEVER */
+//         ap_log_perror(APLOG_MARK, APLOG_DEBUG, 0, working_pool, "loading: %s", spec->file);
+//         
+//         if ((rs = luaL_loadfile(L, spec->file))) {
+//             return rs;
+//         }
+//     }
+// 
+//     return 0;
+// }
 
 /* BEGIN NEW STYLE lua_State MANAGEMENT */
 
@@ -686,7 +685,9 @@
                             void* btn) {
     
     lua_State* L;
+    ap_log_perror(APLOG_MARK, APLOG_WARNING, 0, lifecycle_pool, "obtaining lua_State");
     if (!apr_pool_userdata_get((void**)&L, file, lifecycle_pool)) {
+        ap_log_perror(APLOG_MARK, APLOG_WARNING, 0, lifecycle_pool, "creating lua_State with file %s", file);
         /* not available, so create */
         L =  luaL_newstate();
         luaL_openlibs(L);        
@@ -704,8 +705,7 @@
         apr_pool_userdata_set(L, file, &cleanup_lua, lifecycle_pool);
         
         lua_pushlightuserdata(L, lifecycle_pool);
-        lua_setfield(L, LUA_REGISTRYINDEX, "Apache2.Wombat.pool");
-                
+        lua_setfield(L, LUA_REGISTRYINDEX, "Apache2.Wombat.pool");  
     }
     return L;
 }

Modified: httpd/mod_wombat/trunk/vmprep.h
URL: http://svn.apache.org/viewvc/httpd/mod_wombat/trunk/vmprep.h?rev=721594&r1=721593&r2=721594&view=diff
==============================================================================
--- httpd/mod_wombat/trunk/vmprep.h (original)
+++ httpd/mod_wombat/trunk/vmprep.h Fri Nov 28 16:18:43 2008
@@ -100,13 +100,13 @@
  * a handle to a lua state. If there is not an extant vm matching the
  * spec then a new one is created.
  */
-lua_State* apw_rgetvm(request_rec *r, apw_vm_spec *spec);
+// lua_State* apw_rgetvm(request_rec *r, apw_vm_spec *spec);
 
 /* returns NULL if the spec requires a request scope */
-lua_State* apw_cgetvm(conn_rec *r, apw_vm_spec *spec);
+// lua_State* apw_cgetvm(conn_rec *r, apw_vm_spec *spec);
 
 /* returns NULL if the spec requires a request scope or conn scope */
-lua_State* apw_sgetvm(server_rec *r, apw_vm_spec *spec);
+// lua_State* apw_sgetvm(server_rec *r, apw_vm_spec *spec);
 
 typedef void (*apw_lua_state_open_callback) (lua_State* L, apr_pool_t* p, void* ctx);