]> rtime.felk.cvut.cz Git - frescor/frsh.git/commitdiff
Add options to daemonize FCB and FRM_DUMMY
authorMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 18 Jun 2010 23:39:07 +0000 (01:39 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 18 Jun 2010 23:39:07 +0000 (01:39 +0200)
fres/cbroker/fcb.c
fres/resmng/frm_generic.c
resources/dummy/frm_dummy.c

index cb9e9a2a578eb283db51881c805ce0a2dbbd649a..8cebbf670eca312a1daece35924ef829c5c5e940 100644 (file)
@@ -53,6 +53,7 @@
  * 
  * 
  */
+#include <semaphore.h>
 #include <getopt.h>
 #include <forb.h>
 #include <forb/config.h>
@@ -78,6 +79,8 @@ UL_LOG_CUST(ulogd_fcb);
 ul_log_domain_t ulogd_fcb = {UL_LOGL_MSG, "main"};
 UL_LOGREG_SINGLE_DOMAIN_INIT_FUNCTION(init_ulogd_fcb, ulogd_fcb);
        
+bool opt_daemon = false;
+char *opt_pidfile = NULL;
 fosa_abs_time_t start_time;
 
 
@@ -956,7 +959,8 @@ void peer_dead_callback(const forb_orb peer_orb, const char *orb_id)
 }
 
 static struct option long_opts[] = {
-    { "loglevel", 1, 0, 'l' },
+    { "daemon",   optional_argument, NULL, 'd' },
+    { "loglevel", required_argument, NULL, 'l' },
     { 0, 0, 0, 0}
 };
 
@@ -964,6 +968,7 @@ static void
 usage(void)
 {
        printf("usage: fcb [ options ]\n");
+       printf("  -d, --daemon [pid-file]   go to background after FORB initialization\n");
        printf("  -l, --loglevel <number>|<domain>=<number>,...\n");
 }
 
@@ -992,7 +997,7 @@ int main(int argc, char *argv[])
        };
        int  opt;
 
-       while ((opt = getopt_long(argc, argv, "l:", &long_opts[0], NULL)) != EOF) {
+       while ((opt = getopt_long(argc, argv, "d::l:", &long_opts[0], NULL)) != EOF) {
                switch (opt) {
                        case 'l':
                                if (*optarg == '?') {
@@ -1006,6 +1011,10 @@ int main(int argc, char *argv[])
                                                error(1, EINVAL, "Error parsing -l argument at char %d\n", ret);
                                }
                                break;
+                       case 'd':
+                               opt_daemon = true;
+                               opt_pidfile = optarg;
+                               break;
                        case 'h':
                        /*default:*/
                                usage();
@@ -1015,6 +1024,9 @@ int main(int argc, char *argv[])
 
        fosa_clock_get_time(CLOCK_REALTIME, &start_time);
 
+       if (opt_daemon)
+               forb_daemon_prepare(opt_pidfile);
+
        orb = forb_init(&argc, &argv, &attr);
        if (!orb) error(1, errno, "FORB initialization failed");
 
@@ -1041,6 +1053,9 @@ int main(int argc, char *argv[])
        if (ret) error(1, errno, "forb_register_reference() failed");
 
        ul_logmsg("Waiting for requests\n");
+       if (opt_daemon)
+               forb_daemon_ready();
+
        ret = forb_executor_run(&executor);
        if (ret) error(1, errno, "forb_executor_run failed");
        
index dc914a94e289fa3a628279f6e928de49ae4c11f3..417598a8fbe207a1c1b4bb11f681acbd9caf0c77 100644 (file)
@@ -448,6 +448,7 @@ int frm_register_and_run(forb_orb orb, const struct fres_res_manager *desc)
                
        /* Start request processing */
        ul_logmsg("Waiting for requests\n");
+       forb_daemon_ready();
        ret = forb_executor_run(&executor);
        if (ret) goto err_release_frm;
 
index 082564ce396c116c8659b1398de7333f9ff62614..bd7717531764d282754b08375b54f2955870ca4a 100644 (file)
@@ -69,6 +69,8 @@
 #include "dummy_config.h"
 
 bool opt_accept_all = false;
+bool opt_daemon = false;
+char *opt_pidfile = NULL;
 
 struct dummy_data {
        int some_data;
@@ -159,6 +161,7 @@ static const struct fres_res_manager frm = {
 };
 
 static struct option long_opts[] = {
+    { "daemon",   optional_argument, NULL, 'd' },
     { "loglevel", 1, 0, 'l' },
     { "accept-all", 0, 0, 'a' },
     { "help", 0, 0, 'h' },
@@ -169,9 +172,10 @@ static void
 usage(void)
 {
        printf("usage: frm_dummy [ options ]\n");
-       printf("  -l, --loglevel <number>|<domain>=<number>,...\n");
        printf("  -a, --accept-all   Accepts all contracts\n");
+       printf("  -d, --daemon [pid-file]   go to background after FORB initialization\n");
        printf("  -h, --help         Display this help\n");
+       printf("  -l, --loglevel <number>|<domain>=<number>,...\n");
 }
 
 int main(int argc, char *argv[])
@@ -181,10 +185,14 @@ int main(int argc, char *argv[])
        forb_init_attr_t attr = { .orb_id = "org.frescor.frm.dummy" };
        int  opt;
 
-       while ((opt = getopt_long(argc, argv, "al:h", &long_opts[0], NULL)) != EOF) {
+       while ((opt = getopt_long(argc, argv, "ad::l:h", &long_opts[0], NULL)) != EOF) {
                switch (opt) {
                        case 'a':
                                opt_accept_all = true;
+                       case 'd':
+                               opt_daemon = true;
+                               opt_pidfile = optarg;
+                               break;
                        case 'l':
                                ul_log_domain_arg2levels(optarg);
                                break;
@@ -195,6 +203,9 @@ int main(int argc, char *argv[])
                }
        }
 
+       if (opt_daemon)
+               forb_daemon_prepare(opt_pidfile);
+
        orb = forb_init(&argc, &argv, &attr);
        if (!orb) error(1, errno, "forb_init");