[tuxdroid-svn] r179 - daemon/trunk
Status: Beta
Brought to you by:
ks156
From: remi <c2m...@c2...> - 2007-03-20 10:19:14
|
Author: remi Date: 2007-03-20 11:18:59 +0100 (Tue, 20 Mar 2007) New Revision: 179 Modified: daemon/trunk/main.c Log: UPD : - Patch by Philippe Teuwen for the "Daemon eating CPU in daemon mode" has been applied Modified: daemon/trunk/main.c =================================================================== --- daemon/trunk/main.c 2007-03-19 17:08:56 UTC (rev 178) +++ daemon/trunk/main.c 2007-03-20 10:18:59 UTC (rev 179) @@ -84,6 +84,28 @@ } /************************************************************************ */ +/* Clean closing of STD IN-OUT FILENO*/ +/************************************************************************ */ +static int fd_nullify (int desired_fd) +{ + int fd; + int fd2; + int saved_errno; + + close (desired_fd); + fd = open ("/dev/null", O_WRONLY, S_IRUSR | S_IWUSR); + if (fd == desired_fd || fd < 0) + return fd; + else { + fd2 = fcntl (fd, F_DUPFD, desired_fd); + saved_errno = errno; + close (fd); + errno = saved_errno; + return fd2; + } +} + +/************************************************************************ */ /* Daemonizer */ /************************************************************************ */ void daemonize(unsigned char shell_view) @@ -114,13 +136,13 @@ exit(1); } DAEMON_PID = (unsigned short)getpid(); - printf("Daemon started : pid = %d\n", (int)getpid()); + printf("Tux USB Daemon started : pid = %d\n", (int)getpid()); /* No shell */ if (!shell_view) { - close(STDIN_FILENO); - close(STDOUT_FILENO); - close(STDERR_FILENO); + fd_nullify(STDIN_FILENO); + fd_nullify(STDOUT_FILENO); + fd_nullify(STDERR_FILENO); } } @@ -152,15 +174,6 @@ unsigned char shell_view = 0; unsigned char daemonized = 0; - /* Print daemon informations */ - print_info_daemon(); - -#ifdef USB_DEBUG - /* Set libusb debug level */ - usb_set_debug(LIBUSB_DEBUG_LEVEL); - usb_init(); -#endif - /* Program arguments */ if (argc > 1) { @@ -190,6 +203,14 @@ } if (daemonized) daemonize(shell_view); + /* Print daemon informations */ + print_info_daemon(); + +#ifdef USB_DEBUG + /* Set libusb debug level */ + usb_set_debug(LIBUSB_DEBUG_LEVEL); + usb_init(); +#endif /* On exiting */ signal(SIGINT, on_close_daemon); signal(SIGKILL, on_close_daemon); |