Author: pjd
Date: Fri Jan 28 21:52:37 2011
New Revision: 218043
URL: http://svn.freebsd.org/changeset/base/218043

Log:
  Close all unneeded descriptors after fork(2).
  
  MFC after:    1 week

Modified:
  head/sbin/hastd/primary.c
  head/sbin/hastd/secondary.c

Modified: head/sbin/hastd/primary.c
==============================================================================
--- head/sbin/hastd/primary.c   Fri Jan 28 21:51:40 2011        (r218042)
+++ head/sbin/hastd/primary.c   Fri Jan 28 21:52:37 2011        (r218043)
@@ -790,7 +790,7 @@ hastd_primary(struct hast_resource *res)
 {
        pthread_t td;
        pid_t pid;
-       int error;
+       int error, mode;
 
        /*
         * Create communication channel between parent and child.
@@ -822,19 +822,24 @@ hastd_primary(struct hast_resource *res)
                /* This is parent. */
                /* Declare that we are receiver. */
                proto_recv(res->hr_event, NULL, 0);
+               /* Declare that we are sender. */
+               proto_send(res->hr_ctrl, NULL, 0);
                res->hr_workerpid = pid;
                return;
        }
 
        gres = res;
-
-       (void)pidfile_close(pfh);
-       hook_fini();
-
-       setproctitle("%s (primary)", res->hr_name);
+       mode = pjdlog_mode_get();
 
        /* Declare that we are sender. */
        proto_send(res->hr_event, NULL, 0);
+       /* Declare that we are receiver. */
+       proto_recv(res->hr_ctrl, NULL, 0);
+       descriptors_cleanup(res);
+
+       pjdlog_init(mode);
+       pjdlog_prefix_set("[%s] (%s) ", res->hr_name, role2str(res->hr_role));
+       setproctitle("%s (primary)", res->hr_name);
 
        init_local(res);
        init_ggate(res);

Modified: head/sbin/hastd/secondary.c
==============================================================================
--- head/sbin/hastd/secondary.c Fri Jan 28 21:51:40 2011        (r218042)
+++ head/sbin/hastd/secondary.c Fri Jan 28 21:52:37 2011        (r218043)
@@ -347,7 +347,7 @@ hastd_secondary(struct hast_resource *re
        sigset_t mask;
        pthread_t td;
        pid_t pid;
-       int error;
+       int error, mode;
 
        /*
         * Create communication channel between parent and child.
@@ -380,23 +380,28 @@ hastd_secondary(struct hast_resource *re
                res->hr_remoteout = NULL;
                /* Declare that we are receiver. */
                proto_recv(res->hr_event, NULL, 0);
+               /* Declare that we are sender. */
+               proto_send(res->hr_ctrl, NULL, 0);
                res->hr_workerpid = pid;
                return;
        }
 
        gres = res;
+       mode = pjdlog_mode_get();
 
-       (void)pidfile_close(pfh);
-       hook_fini();
+       /* Declare that we are sender. */
+       proto_send(res->hr_event, NULL, 0);
+       /* Declare that we are receiver. */
+       proto_recv(res->hr_ctrl, NULL, 0);
+       descriptors_cleanup(res);
 
+       pjdlog_init(mode);
+       pjdlog_prefix_set("[%s] (%s) ", res->hr_name, role2str(res->hr_role));
        setproctitle("%s (secondary)", res->hr_name);
 
        PJDLOG_VERIFY(sigemptyset(&mask) == 0);
        PJDLOG_VERIFY(sigprocmask(SIG_SETMASK, &mask, NULL) == 0);
 
-       /* Declare that we are sender. */
-       proto_send(res->hr_event, NULL, 0);
-
        /* Error in setting timeout is not critical, but why should it fail? */
        if (proto_timeout(res->hr_remotein, 0) < 0)
                pjdlog_errno(LOG_WARNING, "Unable to set connection timeout");
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to