]> xenbits.xensource.com Git - people/julieng/freebsd.git/commitdiff
Store PID after becoming a daemon() and not before to ensure the
authorhselasky <hselasky@FreeBSD.org>
Mon, 28 Sep 2015 07:23:05 +0000 (07:23 +0000)
committerhselasky <hselasky@FreeBSD.org>
Mon, 28 Sep 2015 07:23:05 +0000 (07:23 +0000)
correct PID gets written to the PID file.

Submitted by: Maxime Soule <btik-fbsd@scoubidou.com>
PR: 203252
MFC after: 2 weeks

usr.bin/usbhidaction/usbhidaction.c

index 876dbca71daf138147ef072ff07068e7c23ff459..49cf0af2a8f2f5f8c5f8550a213c5aa23c45255f 100644 (file)
@@ -166,17 +166,15 @@ main(int argc, char **argv)
 
        if (demon) {
                fp = open(pidfile, O_WRONLY|O_CREAT, S_IRUSR|S_IRGRP|S_IROTH);
-               if (fp >= 0) {
-                       sz1 = snprintf(buf, sizeof buf, "%ld\n", 
-                           (long)getpid());
-                       if (sz1 > sizeof buf)
-                               sz1 = sizeof buf;
-                       write(fp, buf, sz1);
-                       close(fp);
-               } else
+               if (fp < 0)
                        err(1, "%s", pidfile);
                if (daemon(0, 0) < 0)
                        err(1, "daemon()");
+               snprintf(buf, sizeof(buf), "%ld\n", (long)getpid());
+               sz1 = strlen(buf);
+               if (write(fp, buf, sz1) < 0)
+                       err(1, "%s", pidfile);
+               close(fp);
                isdemon = 1;
        }