Called appropriately waitpid() function 79/136779/1
authorhyunuktak <hyunuk.tak@samsung.com>
Mon, 3 Jul 2017 06:59:26 +0000 (15:59 +0900)
committerhyunuktak <hyunuk.tak@samsung.com>
Mon, 3 Jul 2017 06:59:29 +0000 (15:59 +0900)
to wait for the child process to terminate.

Change-Id: I01778a0270026c0779f3484d31870278a7cd4a58
Signed-off-by: hyunuktak <hyunuk.tak@samsung.com>
packaging/stc-manager.spec
src/helper/helper-nfacct-rule.c
src/stc-manager.c

index 0470c0c..7801d1c 100644 (file)
@@ -1,6 +1,6 @@
 Name:       stc-manager
 Summary:    STC(Smart Traffic Control) manager
-Version:    0.0.20
+Version:    0.0.21
 Release:    0
 Group:      Network & Connectivity/Other
 License:    Apache-2.0
index 3dcde84..5a677f7 100755 (executable)
@@ -539,13 +539,17 @@ static stc_error_e exec_iface_cmd(const char *pattern, const char *cmd,
        ret_value_msg_if(ret > sizeof(block_buf), STC_ERROR_FAIL,
                         "Not enough buffer");
        exec_iptables_cmd(block_buf, pid);
+       wait_for_rule_cmd(*pid);
 
        /* ip6tables rule */
        ret = snprintf(block_buf, sizeof(block_buf), pattern, IP6TABLES, cmd, chain,
                      iftype_name, nfacct, jump);
        ret_value_msg_if(ret > sizeof(block_buf), STC_ERROR_FAIL,
                         "Not enough buffer");
-       return exec_ip6tables_cmd(block_buf, pid);
+       ret = exec_ip6tables_cmd(block_buf, pid);
+       wait_for_rule_cmd(*pid);
+
+       return ret;
 }
 
 static stc_error_e exec_app_cmd(const char *pattern, const char *cmd,
@@ -564,13 +568,17 @@ static stc_error_e exec_app_cmd(const char *pattern, const char *cmd,
        ret_value_msg_if(ret > sizeof(block_buf), STC_ERROR_FAIL,
                         "Not enough buffer");
        exec_iptables_cmd(block_buf, pid);
+       wait_for_rule_cmd(*pid);
 
        /* ip6tables rules */
        ret = snprintf(block_buf, sizeof(block_buf), pattern, IP6TABLES, cmd,
                      iftype_name, classid, nfacct, jump);
        ret_value_msg_if(ret > sizeof(block_buf), STC_ERROR_FAIL,
                         "Not enough buffer");
-       return exec_ip6tables_cmd(block_buf, pid);
+       ret = exec_ip6tables_cmd(block_buf, pid);
+       wait_for_rule_cmd(*pid);
+
+       return ret;
 }
 
 static char *get_iptables_cmd(const nfacct_rule_action action)
@@ -661,7 +669,6 @@ static stc_error_e produce_app_rule(nfacct_rule_s *rule,
                         *      set new counter with that value, but it's minor issue,
                         *      due it's not clear when actual counters was stored,
                         *      and based on which value settings made such decition */
-                       wait_for_rule_cmd(pid);
                        rule->iptables_rule = nfacct_send_del;
                        set_finalize_flag(rule);
                        nfacct_send_get(rule);
@@ -700,7 +707,6 @@ static stc_error_e produce_app_rule(nfacct_rule_s *rule,
                                 " traffic, for classid %u, cmd %s, j %s",
                                 rule->classid, set_cmd, jump_cmd);
                if (action == NFACCT_ACTION_DELETE) {
-                       wait_for_rule_cmd(pid);
                        rule->iptables_rule = nfacct_send_del;
                        /* not effective, it's better to replace
                         * set_finalize_flag by set_property,
@@ -768,7 +774,6 @@ static stc_error_e produce_iface_rule(nfacct_rule_s *rule,
                if (rule->intend == NFACCT_WARN ||
                    rule->intend == NFACCT_BLOCK) {
                        /* RULE_IFACE_OUT is not a misprint here */
-                       wait_for_rule_cmd(pid);
                        ret = exec_iface_cmd(RULE_IFACE_IN, set_cmd,
                                             FORWARD_RULE, nfacct_buf, jump_cmd,
                                             choose_iftype_name(rule), &pid);
@@ -780,7 +785,6 @@ static stc_error_e produce_iface_rule(nfacct_rule_s *rule,
                /* tethering */
 
                if (action == NFACCT_ACTION_DELETE) {
-                       wait_for_rule_cmd(pid);
                        rule->iptables_rule = nfacct_send_del;
                        set_finalize_flag(rule);
                        nfacct_send_get(rule);
@@ -815,7 +819,6 @@ static stc_error_e produce_iface_rule(nfacct_rule_s *rule,
                ret_value_msg_if(ret > sizeof(nfacct_buf) || ret < 0,
                                 STC_ERROR_FAIL, "Not enough buffer");
 
-               wait_for_rule_cmd(pid);
                ret = exec_iface_cmd(RULE_IFACE_OUT, set_cmd, OUT_RULE,
                                     nfacct_buf, jump_cmd,
                                     choose_iftype_name(rule), &pid);
@@ -826,7 +829,6 @@ static stc_error_e produce_iface_rule(nfacct_rule_s *rule,
                /* for tethering  */
                if (rule->intend == NFACCT_WARN ||
                    rule->intend == NFACCT_BLOCK) {
-                       wait_for_rule_cmd(pid);
                        ret = exec_iface_cmd(RULE_IFACE_OUT, set_cmd,
                                             FORWARD_RULE, nfacct_buf, jump_cmd,
                                             choose_iftype_name(rule), &pid);
@@ -838,7 +840,6 @@ static stc_error_e produce_iface_rule(nfacct_rule_s *rule,
                /* tethering  */
 
                if (action == NFACCT_ACTION_DELETE) {
-                       wait_for_rule_cmd(pid);
                        rule->iptables_rule = nfacct_send_del;
                        set_finalize_flag(rule);
                        nfacct_send_get(rule);
index 1f856ef..dc923ff 100755 (executable)
@@ -94,8 +94,6 @@ gint32 main(gint32 argc, gchar *argv[])
        GMainLoop *main_loop = NULL;
        gint32 ret = -1;
 
-       signal(SIGCHLD, SIG_IGN);
-
        STC_LOGI("Smart Traffic Control Manager");
 
        if (daemon(0, 0) != 0)