#include <config.h>
#include "daemon.h"
+#include "daemon-private.h"
#include <stdio.h>
#include <stdlib.h>
#include "poll-loop.h"
#include "vlog.h"
-VLOG_DEFINE_THIS_MODULE(daemon);
+VLOG_DEFINE_THIS_MODULE(daemon_windows);
static bool service_create; /* Was --service specified? */
static bool service_started; /* Have we dispatched service to start? */
* unexpectedly? */
static bool monitor;
-static bool detach; /* Was --detach specified? */
-static bool detached; /* Running as the child process. */
-static HANDLE write_handle; /* End of pipe to write to parent. */
+bool detach; /* Was --detach specified? */
+static bool detached; /* Running as the child process. */
+static HANDLE write_handle; /* End of pipe to write to parent. */
-static char *pidfile; /* --pidfile: Name of pidfile (null if none). */
-static FILE *filep_pidfile; /* File pointer to access the pidfile. */
+char *pidfile; /* --pidfile: Name of pidfile (null if none). */
+static FILE *filep_pidfile; /* File pointer to access the pidfile. */
/* Handle to the Services Manager and the created service. */
static SC_HANDLE manager, service;
exit(0);
}
-/* Will daemonize() really detach? */
-bool
-get_detach()
-{
- return detach;
-}
-
-void
-daemon_save_fd(int fd OVS_UNUSED)
-{
-}
-
-void
-daemonize(void)
-{
- daemonize_start();
- daemonize_complete();
-}
-
static void
unlink_pidfile(void)
{
* communicate with the parent to inform that the child is ready. */
if (detached) {
int error;
+
+ close_standard_fds();
+
error = WriteFile(write_handle, "a", 1, NULL, NULL);
if (!error) {
VLOG_FATAL("Failed to communicate with the parent (%s)",
/* Returns the file name that would be used for a pidfile if 'name' were
* provided to set_pidfile(). The caller must free the returned string. */
-static char *
+char *
make_pidfile_name(const char *name)
{
if (name && strchr(name, ':')) {
return xasprintf("%s/%s.pid", ovs_rundir(), program_name);
}
}
-
-/* Sets up a following call to daemonize() to create a pidfile named 'name'.
- * If 'name' begins with '/', then it is treated as an absolute path.
- * Otherwise, it is taken relative to RUNDIR, which is $(prefix)/var/run by
- * default.
- *
- * If 'name' is null, then program_name followed by ".pid" is used. */
-void
-set_pidfile(const char *name)
-{
- assert_single_threaded();
- free(pidfile);
- pidfile = make_pidfile_name(name);
-}