Revision
23866
Author
dsorresso@apple.com
Date
2009-03-24 13:59:07 -0700 (Tue, 24 Mar 2009)

Log Message

<rdar://problem/6714910> launchd's logging about what look like a bugs in it.

Modified Paths

Diff

Modified: trunk/launchd/src/launchd_core_logic.c (23865 => 23866)


--- trunk/launchd/src/launchd_core_logic.c	2009-03-24 17:52:00 UTC (rev 23865)
+++ trunk/launchd/src/launchd_core_logic.c	2009-03-24 20:59:07 UTC (rev 23866)
@@ -5559,7 +5559,7 @@
 	
 	jobmgr_t r = jm;
 	if( jm->shutdown_phase > JOBMGR_PHASE_HOPEFULLY_EXITS_LAST && SLIST_EMPTY(&jm->submgrs) ) {
-		jobmgr_log(jm, LOG_DEBUG | LOG_CONSOLE, "Removing.");
+		jobmgr_log(jm, LOG_DEBUG, "Removing.");
 		jobmgr_log_stray_children(jm, false);
 		jobmgr_remove(jm);
 		r = NULL;
@@ -7296,13 +7296,22 @@
 			char pu_db[PATH_MAX];
 			snprintf(pu_db, sizeof(pu_db), LAUNCHD_DB_PREFIX "/%s", lbuf);
 			
-			int err = -1;
-			if( (err = stat(pu_db, &sb)) == -1 && job_assumes(ji, errno == ENOENT) ) {
+			bool created = false;
+			int err = stat(pu_db, &sb);
+			if( (err == -1 && errno == ENOENT) || (err == 0 && !S_ISDIR(sb.st_mode)) ) {
+				if( err == 0 ) {
+					char move_aside[PATH_MAX];
+					snprintf(move_aside, sizeof(move_aside), LAUNCHD_DB_PREFIX "/%s.movedaside", lbuf);
+					
+					job_assumes(ji, rename(pu_db, move_aside) != -1);
+				}
+
 				job_assumes(ji, mkdir(pu_db, S_IRWXU) != -1);
-				job_assumes(ji, (err = stat(pu_db, &sb)) != -1);
+				job_assumes(ji, chown(pu_db, which_user, 0) != -1);
+				created = true;
 			}
 			
-			if( err != -1 ) {
+			if( !created ) {
 				if( !job_assumes(ji, sb.st_uid == which_user) ) {
 					job_assumes(ji, chown(pu_db, which_user, 0) != -1);
 				}