From bdb8cb69e466755acb7750cd6a467261c80c53ae Mon Sep 17 00:00:00 2001 From: Adhavan M Date: Fri, 4 May 2018 10:35:36 +0000 Subject: [PATCH] Revert "Remove daemonization" This reverts commit 94a707f6ecd68a9ef1c4e4ecbf519849fedad6b7. Change-Id: I9544755f829daa11b8ab0d697fc3ebed3de6caa0 --- packaging/sdbd.service | 2 +- packaging/sdbd_device.service | 2 +- packaging/sdbd_device_tv.service | 2 +- packaging/sdbd_emulator.service | 2 +- packaging/sdbd_emulator_tv.service | 2 +- packaging/sdbd_tcp.service | 2 +- src/sdb.c | 40 ++++++++++++++++++++++++++++++ 7 files changed, 46 insertions(+), 6 deletions(-) diff --git a/packaging/sdbd.service b/packaging/sdbd.service index eb49efe..8f65db9 100644 --- a/packaging/sdbd.service +++ b/packaging/sdbd.service @@ -4,7 +4,7 @@ Description=sdbd [Service] #If necessary, Put Environment variable settings in a file like below #ExecStartPre=/bin/bash -c "/bin/echo 'SDB_TRACE=all SDBD_LOG_PATH=/tmp' >> /tmp/.sdbdlog.conf" -Type=simple +Type=forking PIDFile=/tmp/.sdbd.pid RemainAfterExit=yes ExecStart=/usr/sbin/sdbd diff --git a/packaging/sdbd_device.service b/packaging/sdbd_device.service index 080e0ed..38851a8 100644 --- a/packaging/sdbd_device.service +++ b/packaging/sdbd_device.service @@ -6,7 +6,7 @@ After=tmp.mount [Service] User=sdk Group=sdk -Type=simple +Type=forking #location of SDBD log file #If necessary, Put Environment variable settings in a file like below #ExecStartPre=/bin/bash -c "/bin/echo 'SDB_TRACE=all SDBD_LOG_PATH=/tmp' >> /tmp/.sdbdlog.conf" diff --git a/packaging/sdbd_device_tv.service b/packaging/sdbd_device_tv.service index 88d3a08..416c818 100644 --- a/packaging/sdbd_device_tv.service +++ b/packaging/sdbd_device_tv.service @@ -4,7 +4,7 @@ Requires=tizen-system-env.service After=tmp.mount [Service] -Type=simple +Type=forking #location of SDBD log file #Environment=SDBD_LOG_PATH=/tmp #If necessary, Put Environment variable settings in a file like below diff --git a/packaging/sdbd_emulator.service b/packaging/sdbd_emulator.service index 9b87f40..e6a4d3e 100644 --- a/packaging/sdbd_emulator.service +++ b/packaging/sdbd_emulator.service @@ -7,7 +7,7 @@ After=tmp.mount dbus.service [Service] User=sdk Group=sdk -Type=simple +Type=forking Environment=DISPLAY=:0 PIDFile=/tmp/.sdbd.pid RemainAfterExit=yes diff --git a/packaging/sdbd_emulator_tv.service b/packaging/sdbd_emulator_tv.service index 3dc42e3..634974c 100644 --- a/packaging/sdbd_emulator_tv.service +++ b/packaging/sdbd_emulator_tv.service @@ -5,7 +5,7 @@ After=tmp.mount dbus.service #DefaultDependencies=false [Service] -Type=simple +Type=forking #location of SDBD log file #Environment=SDBD_LOG_PATH=/tmp #If necessary, Put Environment variable settings in a file like below diff --git a/packaging/sdbd_tcp.service b/packaging/sdbd_tcp.service index 6871f29..7ff330d 100644 --- a/packaging/sdbd_tcp.service +++ b/packaging/sdbd_tcp.service @@ -5,7 +5,7 @@ After=default.target [Service] User=sdk Group=sdk -Type=simple +Type=forking Environment=DISPLAY=:0 #If necessary, Put Environment variable settings in a file like below #ExecStartPre=/bin/bash -c "/bin/echo 'SDB_TRACE=all SDBD_LOG_PATH=/tmp' >> /tmp/.sdbdlog.conf" diff --git a/src/sdb.c b/src/sdb.c index fe77333..cbe42b3 100644 --- a/src/sdb.c +++ b/src/sdb.c @@ -1225,6 +1225,43 @@ void start_device_log(void) sdb_close(fd); } +int daemonize(void) { + + // set file creation mask to 0 + umask(0); + + switch (fork()) { + case -1: + return -1; + case 0: + break; + default: + _exit(0); + } +#ifdef SDB_PIDPATH + char* tmppath = NULL; + tmppath = realpath(SDB_PIDPATH, NULL); + if (tmppath == NULL && errno == ENOENT) { + FILE *f = fopen(SDB_PIDPATH, "w"); + + if (f != NULL) { + fprintf(f, "%d\n", getpid()); + fclose(f); + } + } else { + D("sdbd: %s file is existed. It might not work properly.\n", SDB_PIDPATH); + free(tmppath); + } +#endif + if (setsid() == -1) + return -1; + + if (chdir("/") < 0) + D("sdbd: unable to change working directory to /\n"); + + return 0; +} + /* Constructs a local name of form tcp:port. * target_str points to the target string, it's content will be overwritten. * target_size is the capacity of the target string. @@ -2265,6 +2302,9 @@ int main(int argc, char **argv) return EXIT_FAILURE; } + if (daemonize() < 0) + fatal("daemonize() failed: errno:%d", errno); + D("Handling main()\n"); //sdbd will never die on emulator! -- 2.34.1