diff -Nru a/libntp/msyslog.c b/libntp/msyslog.c
--- a/libntp/msyslog.c	2023-07-18 19:17:53 +0000
+++ b/libntp/msyslog.c	2023-07-18 19:17:53 +0000
@@ -348,15 +348,14 @@
 	...
 	)
 {
-	char	buf[1024];
 	va_list	ap;

 	va_start(ap, fmt);
-	mvsnprintf(buf, sizeof(buf), fmt, ap);
+	mvsyslog(level, fmt, ap);
 	va_end(ap);
-	addto_syslog(level, buf);
 }

+
 void
 mvsyslog(
 	int		level,
@@ -365,6 +364,7 @@
 	)
 {
 	char	buf[1024];
+
 	mvsnprintf(buf, sizeof(buf), fmt, ap);
 	addto_syslog(level, buf);
 }
diff -Nru a/ntpd/ntp_loopfilter.c b/ntpd/ntp_loopfilter.c
--- a/ntpd/ntp_loopfilter.c	2023-07-18 19:17:53 +0000
+++ b/ntpd/ntp_loopfilter.c	2023-07-18 19:17:53 +0000
@@ -1027,6 +1027,22 @@
 		    tc_counter));
 	if (trans != state && trans != EVNT_FSET)
 		report_event(trans, NULL, NULL);
+#ifdef HAVE_WORKING_FORK
+	if (trans != state && EVNT_SYNC == trans) {
+		/*
+		 * If our parent process is waiting for the
+		 * first clock sync, send them home satisfied.
+		 */
+		if (daemon_pipe[1] != -1) {
+			if (2 != write(daemon_pipe[1], "S\n", 2)) {
+				msyslog(LOG_ERR, "daemon failed to notify parent ntpd (--wait-sync)");
+			}
+			close(daemon_pipe[1]);
+			daemon_pipe[1] = -1;
+		}
+	}
+#endif /* HAVE_WORKING_FORK */
+
 	state = trans;
 	last_offset = clock_offset = offset;
 	clock_epoch = current_time;
diff -Nru a/ntpd/ntp_proto.c b/ntpd/ntp_proto.c
--- a/ntpd/ntp_proto.c	2023-07-18 19:17:53 +0000
+++ b/ntpd/ntp_proto.c	2023-07-18 19:17:53 +0000
@@ -2981,20 +2981,6 @@
 			if (crypto_flags)
 				crypto_update();
 #endif	/* AUTOKEY */
-			/*
-			 * If our parent process is waiting for the
-			 * first clock sync, send them home satisfied.
-			 */
-#ifdef HAVE_WORKING_FORK
-			if (daemon_pipe[1] != -1) {
-				if (2 != write(daemon_pipe[1], "S\n", 2)) {
-					msyslog(LOG_ERR, "daemon failed to notify parent ntpd (--wait-sync)");
-				}
-				close(daemon_pipe[1]);
-				daemon_pipe[1] = -1;
-				DPRINTF(1, ("notified parent --wait-sync is done\n"));
-			}
-#endif /* HAVE_WORKING_FORK */

 		}

@@ -3933,13 +3919,13 @@
 			sys_clockhop = 0;
 		} else if ((x = fabs(typesystem->offset -
 		    osys_peer->offset)) < sys_mindisp) {
-			if (sys_clockhop == 0)
+			if (0 == sys_clockhop)
 				sys_clockhop = sys_mindisp;
 			else
 				sys_clockhop *= .5;
 			DPRINTF(1, ("select: clockhop %d %.6f %.6f\n",
 				j, x, sys_clockhop));
-			if (fabs(x) < sys_clockhop)
+			if (x < sys_clockhop)
 				typesystem = osys_peer;
 			else
 				sys_clockhop = 0;
diff -Nru a/ntpd/ntpd.c b/ntpd/ntpd.c
--- a/ntpd/ntpd.c	2023-07-18 19:17:53 +0000
+++ b/ntpd/ntpd.c	2023-07-18 19:17:53 +0000
@@ -608,7 +608,6 @@
 			pipe[1] = -1;
 			exit_code = wait_child_sync_if(
 					pipe[0], wait_sync);
-			DPRINTF(1, ("sync_if: rc=%d\n", exit_code));
 			if (exit_code <= 0) {
 				/* probe daemon exit code -- wait for
 				 * child process if we have an unexpected
@@ -616,7 +615,6 @@
 				 */
 				exit_code = wait_child_exit_if(
 						cpid, (exit_code < 0));
-				DPRINTF(1, ("exit_if: rc=%d\n", exit_code));
 			}
 		}
 		exit(exit_code);
@@ -1450,7 +1448,7 @@
 #if defined(SYS_WINNT)
 	ntservice_isup();
 #elif defined(HAVE_WORKING_FORK)
-	if (daemon_pipe[1] != -1) {
+	if (daemon_pipe[1] != -1 && 0 == wait_sync) {
 		if (2 != write(daemon_pipe[1], "R\n", 2)) {
 			msyslog(LOG_ERR, "daemon failed to notify parent ntpd after init");
 		}
@@ -1697,29 +1695,31 @@
 		}
 		rc = read(pipe_read_fd, &ch, 1);
 		if (rc == 0) {
-			DPRINTF(2, ("daemon control: got EOF\n"));
+			/* DPRINTF is useless here as -d/-D disable forking */
+			fprintf(stderr, "daemon control: got EOF\n");
 			return -1;	/* unexpected EOF, check daemon */
 		} else if (rc == 1) {
-			DPRINTF(2, ("daemon control: got '%c'\n",
-				    (ch >= ' ' ? ch : '.')));
-			if (ch == 'R' && !wait_sync)
-				return 0;
-			if (ch == 'S' && wait_sync)
+			if (   ('S' == ch && wait_sync > 0)
+			    || ('R' == ch && 0 == wait_sync)) {
 				return 0;
+			}
 		} else {
-			DPRINTF(2, ("daemon control: read 1 char failed: %s\n",
-				    strerror(errno)));
+			mfprintf(stderr, "%s: daemon control: read 1 char failed: %m\n",
+				 progname);
+			msyslog(LOG_ERR, "daemon control: read 1 char failed: %m");
 			return EX_IOERR;
 		}
 	} while (wait_rem > 0);

-	if (wait_sync) {
+	if (wait_sync > 0) {
 		fprintf(stderr, "%s: -w/--wait-sync %ld timed out.\n",
 			progname, wait_sync);
+		msyslog(LOG_ERR, "-w/--wait-sync %ld timed out.", wait_sync);
 		return EX_PROTOCOL;
 	} else {
 		fprintf(stderr, "%s: daemon startup monitoring timed out.\n",
 			progname);
+		msyslog(LOG_ERR, "daemon startup monitoring timed out.");
 		return 0;
 	}
 }
@@ -1735,7 +1735,6 @@
 	int	rc = 0;
 	int	wstatus;
 	if (cpid == waitpid(cpid, &wstatus, (blocking ? 0 : WNOHANG))) {
-		DPRINTF(1, ("child (pid=%d) dead now\n", cpid));
 		if (WIFEXITED(wstatus)) {
 			rc = WEXITSTATUS(wstatus);
 			msyslog(LOG_ERR, "daemon child exited with code %d",
@@ -1748,8 +1747,6 @@
 			rc = EX_SOFTWARE;
 			msyslog(LOG_ERR, "daemon child died with unknown cause");
 		}
-	} else {
-		DPRINTF(1, ("child (pid=%d) still alive\n", cpid));
 	}
 	return rc;
 #    else
