# HG changeset patch # User Matthew Wild # Date 1232053176 0 # Node ID c1e7d280c1745a120e7f5648ba60a57acbffcfe7 # Parent 63456c9d0522822b8ce028cbf67351c348e50557 mod_posix/pposix: Fix reporting of incorrect PID on daemonization. Log correct PID, and support writing a pidfile (pidfile = '/path/to/prosody.pid' in config). Added getpid() to pposix and improved function names. diff -r 63456c9d0522 -r c1e7d280c174 plugins/mod_posix.lua --- a/plugins/mod_posix.lua Thu Jan 15 20:06:41 2009 +0000 +++ b/plugins/mod_posix.lua Thu Jan 15 20:59:36 2009 +0000 @@ -42,7 +42,6 @@ if not ok then log("error", "Failed to daemonize: %s", ret); elseif ret and ret > 0 then - log("info", "Daemonized to pid %d", ret); os.exit(0); else if logwriter then @@ -51,7 +50,18 @@ log("error", "Couldn't set new log output: %s", ret); end end - log("info", "Successfully daemonized"); + log("info", "Successfully daemonized to PID %d", pposix.getpid()); + + local pidfile = config.get("*", "core", "pidfile"); + if pidfile then + local pf, err = io.open(pidfile, "w+"); + if not pf then + log("error", "Couldn't write pidfile; %s", err); + else + pf:write(tostring(pposix.getpid())); + pf:close(); + end + end end end module:add_event_hook("server-starting", daemonize_server); diff -r 63456c9d0522 -r c1e7d280c174 util-src/pposix.c --- a/util-src/pposix.c Thu Jan 15 20:06:41 2009 +0000 +++ b/util-src/pposix.c Thu Jan 15 20:59:36 2009 +0000 @@ -37,7 +37,7 @@ /* Daemonization support */ -static int daemonize(lua_State *L) +static int lc_daemonize(lua_State *L) { pid_t pid; @@ -147,7 +147,7 @@ */ char* syslog_ident = NULL; -int syslog_open(lua_State* L) +int lc_syslog_open(lua_State* L) { int facility = luaL_checkoption(L, 2, "daemon", &facility_strings); facility = facility_constants[facility]; @@ -179,7 +179,7 @@ LOG_EMERG, -1 }; -int syslog_log(lua_State* L) +int lc_syslog_log(lua_State* L) { int level = luaL_checkoption(L, 1, "notice", &level_strings); level = level_constants[level]; @@ -190,7 +190,7 @@ return 0; } -int syslog_close(lua_State* L) +int lc_syslog_close(lua_State* L) { closelog(); if(syslog_ident) @@ -201,21 +201,34 @@ return 0; } +/* getpid */ + +int lc_getpid(lua_State* L) +{ + lua_pushinteger(L, getpid()); + return 1; +} + +/* Register functions */ + int luaopen_util_pposix(lua_State *L) { lua_newtable(L); - lua_pushcfunction(L, daemonize); + lua_pushcfunction(L, lc_daemonize); lua_setfield(L, -2, "daemonize"); - lua_pushcfunction(L, syslog_open); + lua_pushcfunction(L, lc_syslog_open); lua_setfield(L, -2, "syslog_open"); - lua_pushcfunction(L, syslog_close); + lua_pushcfunction(L, lc_syslog_close); lua_setfield(L, -2, "syslog_close"); - lua_pushcfunction(L, syslog_log); + lua_pushcfunction(L, lc_syslog_log); lua_setfield(L, -2, "syslog_log"); + lua_pushcfunction(L, lc_getpid); + lua_setfield(L, -2, "getpid"); + return 1; };