# ./pullrev.sh 1738229 https://bugzilla.redhat.com/show_bug.cgi?id=1225116 As for mod_auth_digest, fix to use anonymous SHM by default. http://svn.apache.org/viewvc?view=revision&revision=1738229 --- httpd-2.4.18/modules/lua/mod_lua.c +++ httpd-2.4.18/modules/lua/mod_lua.c @@ -83,6 +83,8 @@ int broken; } lua_filter_ctx; +#define DEFAULT_LUA_SHMFILE "lua_ivm_shm" + apr_global_mutex_t *lua_ivm_mutex; apr_shm_t *lua_ivm_shm; char *lua_ivm_shmfile; @@ -1995,7 +1997,6 @@ apr_pool_t *ptemp, server_rec *s) { apr_pool_t **pool; - const char *tempdir; apr_status_t rs; lua_ssl_val = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup); @@ -2011,21 +2012,20 @@ return HTTP_INTERNAL_SERVER_ERROR; } - /* Create shared memory space */ - rs = apr_temp_dir_get(&tempdir, pconf); - if (rs != APR_SUCCESS) { - ap_log_error(APLOG_MARK, APLOG_ERR, rs, s, APLOGNO(02664) - "mod_lua IVM: Failed to find temporary directory"); - return HTTP_INTERNAL_SERVER_ERROR; + /* Create shared memory space, anonymous first if possible. */ + rs = apr_shm_create(&lua_ivm_shm, sizeof pool, NULL, pconf); + if (APR_STATUS_IS_ENOTIMPL(rs)) { + /* Fall back to filename-based; nuke any left-over first. */ + lua_ivm_shmfile = ap_runtime_dir_relative(pconf, DEFAULT_LUA_SHMFILE); + + apr_shm_remove(lua_ivm_shmfile, pconf); + + rs = apr_shm_create(&lua_ivm_shm, sizeof pool, lua_ivm_shmfile, pconf); } - lua_ivm_shmfile = apr_psprintf(pconf, "%s/httpd_lua_shm.%ld", tempdir, - (long int)getpid()); - rs = apr_shm_create(&lua_ivm_shm, sizeof(apr_pool_t**), - (const char *) lua_ivm_shmfile, pconf); if (rs != APR_SUCCESS) { ap_log_error(APLOG_MARK, APLOG_ERR, rs, s, APLOGNO(02665) "mod_lua: Failed to create shared memory segment on file %s", - lua_ivm_shmfile); + lua_ivm_shmfile ? lua_ivm_shmfile : "(anonymous)"); return HTTP_INTERNAL_SERVER_ERROR; } pool = (apr_pool_t **)apr_shm_baseaddr_get(lua_ivm_shm);