prosody: Enable storage manager.
[prosody.git] / plugins / mod_posix.lua
index c38f7eba75399bb9d9e421595f278454c77ec573..77b2f2a4ee25ae16d23d7198e834be09f7b13e10 100644 (file)
@@ -54,16 +54,16 @@ module:add_event_hook("server-started", function ()
        end);
 
 -- Don't even think about it!
-module:add_event_hook("server-starting", function ()
-               local suid = module:get_option("setuid");
-               if not suid or suid == 0 or suid == "root" then
-                       if pposix.getuid() == 0 and not module:get_option("run_as_root") then
-                               module:log("error", "Danger, Will Robinson! Prosody doesn't need to be run as root, so don't do it!");
-                               module:log("error", "For more information on running Prosody as root, see http://prosody.im/doc/root");
-                               prosody.shutdown("Refusing to run as root");
-                       end
+if not prosody.start_time then -- server-starting
+       local suid = module:get_option("setuid");
+       if not suid or suid == 0 or suid == "root" then
+               if pposix.getuid() == 0 and not module:get_option("run_as_root") then
+                       module:log("error", "Danger, Will Robinson! Prosody doesn't need to be run as root, so don't do it!");
+                       module:log("error", "For more information on running Prosody as root, see http://prosody.im/doc/root");
+                       prosody.shutdown("Refusing to run as root");
                end
-       end);
+       end
+end
 
 local pidfile;
 local pidfile_handle;
@@ -95,8 +95,17 @@ local function write_pidfile()
                                pidfile_handle = nil;
                                prosody.shutdown("Prosody already running");
                        else
-                               pidfile_handle:write(tostring(pposix.getpid()));
-                               pidfile_handle:flush();
+                               pidfile_handle:close();
+                               pidfile_handle, err = io.open(pidfile, "w+");
+                               if not pidfile_handle then
+                                       module:log("error", "Couldn't write pidfile at %s; %s", pidfile, err);
+                                       prosody.shutdown("Couldn't write pidfile");
+                               else
+                                       if lfs.lock(pidfile_handle, "w") then
+                                               pidfile_handle:write(tostring(pposix.getpid()));
+                                               pidfile_handle:flush();
+                                       end
+                               end
                        end
                end
        end
@@ -141,7 +150,9 @@ if daemonize then
                        write_pidfile();
                end
        end
-       module:add_event_hook("server-starting", daemonize_server);
+       if not prosody.start_time then -- server-starting
+               daemonize_server();
+       end
 else
        -- Not going to daemonize, so write the pid of this process
        write_pidfile();