Made server launching somewhat cleaner and faster.
diff --git a/server/main.c b/server/main.c
index d26b8cc..79f0f2b 100644
--- a/server/main.c
+++ b/server/main.c
@@ -60,19 +60,6 @@
/* initialize signal handling */
static void signal_init(void)
{
- if (!debug_level)
- {
- switch(fork())
- {
- case -1:
- break;
- case 0:
- setsid();
- break;
- default:
- exit(0);
- }
- }
signal( SIGPIPE, SIG_IGN );
signal( SIGHUP, sigterm_handler );
signal( SIGINT, sigterm_handler );
diff --git a/server/request.c b/server/request.c
index d15faac..dcb7543 100644
--- a/server/request.c
+++ b/server/request.c
@@ -103,6 +103,7 @@
}
/* die on a fatal error */
+static void fatal_error( const char *err, ... ) WINE_NORETURN;
static void fatal_error( const char *err, ... )
{
va_list args;
@@ -115,6 +116,7 @@
}
/* die on a fatal error */
+static void fatal_perror( const char *err, ... ) WINE_NORETURN;
static void fatal_perror( const char *err, ... )
{
va_list args;
@@ -392,6 +394,18 @@
if (!(master_socket = alloc_object( &master_socket_ops, fd )))
fatal_error( "out of memory\n" );
set_select_events( &master_socket->obj, POLLIN );
+
+ /* go in the background */
+ switch(fork())
+ {
+ case -1:
+ fatal_perror( "fork" );
+ case 0:
+ setsid();
+ break;
+ default:
+ _exit(0); /* do not call atexit functions */
+ }
}
/* close the master socket and stop waiting for new clients */