Revision: 23712 http://trac.macosforge.org/projects/launchd/changeset/23712 Author: dsorresso@apple.com Date: 2008-09-17 11:41:18 -0700 (Wed, 17 Sep 2008) Log Message: ----------- <rdar://problem/5879153> Instant Off: SPIs and functionality for tool reporting clean state violations <rdar://problem/6098560> 5858547Blocker: calling vproc_standby_end core dumps <rdar://problem/6103485> 10A127: com.apple.launchctl.System causes 20s stall at installer shutdown <rdar://problem/6156146> vproc_transaction_{begin,end} should be declared AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER <rdar://problem/6217672> per-user launchd "Shutdown began at" messages are confusing Modified Paths: -------------- trunk/launchd/src/Makefile.am trunk/launchd/src/Makefile.in trunk/launchd/src/launchctl.c trunk/launchd/src/launchd.c trunk/launchd/src/launchd.h trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/launchd_runtime.c trunk/launchd/src/launchd_runtime.h trunk/launchd/src/liblaunch.c trunk/launchd/src/liblaunch_private.h trunk/launchd/src/liblaunch_public.h trunk/launchd/src/libvproc.c trunk/launchd/src/libvproc_private.h Added Paths: ----------- trunk/launchd/src/launchd_ktrace.c trunk/launchd/src/launchd_ktrace.h Modified: trunk/launchd/src/Makefile.am =================================================================== --- trunk/launchd/src/Makefile.am 2008-09-03 00:07:58 UTC (rev 23711) +++ trunk/launchd/src/Makefile.am 2008-09-17 18:41:18 UTC (rev 23712) @@ -16,10 +16,10 @@ noinst_LIBRARIES = liblaunch.a liblaunch_profile.a liblaunch_a_CFLAGS = -D__DARWIN_NON_CANCELABLE=1 $(AM_CFLAGS) -liblaunch_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c __version.c +liblaunch_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c launchd_ktrace.c __version.c liblaunch_profile_a_CFLAGS = -pg -D__DARWIN_NON_CANCELABLE=1 $(AM_CFLAGS) -liblaunch_profile_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c __version.c +liblaunch_profile_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c launchd_ktrace.c __version.c $(srcdir)/libvproc.c:: protocol_vproc.h @@ -59,7 +59,7 @@ launchd_CFLAGS = -mdynamic-no-pic $(AM_CFLAGS) launchd_LDFLAGS = $(AM_LDFLAGS) -lbsm -launchd_SOURCES = launchd.c launchd_core_logic.c launchd_unix_ipc.c protocol_vprocServer.c notifyServer.c launchd_internalUser.c launchd_internalServer.c job_replyUser.c launchd_runtime.c launchd_runtime_kill.c job_forwardUser.c mach_excServer.c +launchd_SOURCES = launchd.c launchd_core_logic.c launchd_unix_ipc.c protocol_vprocServer.c notifyServer.c launchd_internalUser.c launchd_internalServer.c job_replyUser.c launchd_runtime.c launchd_runtime_kill.c job_forwardUser.c mach_excServer.c launchd_ktrace.c launchd_runtime.c:: notifyServer.h launchd_internal.h mach_excServer.h launchd_core_logic.c:: protocol_vproc.h job_reply.h protocol_vprocServer.h job_forward.h Modified: trunk/launchd/src/Makefile.in =================================================================== --- trunk/launchd/src/Makefile.in 2008-09-03 00:07:58 UTC (rev 23711) +++ trunk/launchd/src/Makefile.in 2008-09-17 18:41:18 UTC (rev 23712) @@ -55,23 +55,26 @@ liblaunch_a_AR = $(AR) $(ARFLAGS) liblaunch_a_LIBADD = am__liblaunch_a_SOURCES_DIST = liblaunch.c libvproc.c libbootstrap.c \ - protocol_vprocUser.c __version.c + protocol_vprocUser.c launchd_ktrace.c __version.c @LIBS_ONLY_TRUE@am_liblaunch_a_OBJECTS = \ @LIBS_ONLY_TRUE@ liblaunch_a-liblaunch.$(OBJEXT) \ @LIBS_ONLY_TRUE@ liblaunch_a-libvproc.$(OBJEXT) \ @LIBS_ONLY_TRUE@ liblaunch_a-libbootstrap.$(OBJEXT) \ @LIBS_ONLY_TRUE@ liblaunch_a-protocol_vprocUser.$(OBJEXT) \ +@LIBS_ONLY_TRUE@ liblaunch_a-launchd_ktrace.$(OBJEXT) \ @LIBS_ONLY_TRUE@ liblaunch_a-__version.$(OBJEXT) liblaunch_a_OBJECTS = $(am_liblaunch_a_OBJECTS) liblaunch_profile_a_AR = $(AR) $(ARFLAGS) liblaunch_profile_a_LIBADD = am__liblaunch_profile_a_SOURCES_DIST = liblaunch.c libvproc.c \ - libbootstrap.c protocol_vprocUser.c __version.c + libbootstrap.c protocol_vprocUser.c launchd_ktrace.c \ + __version.c @LIBS_ONLY_TRUE@am_liblaunch_profile_a_OBJECTS = \ @LIBS_ONLY_TRUE@ liblaunch_profile_a-liblaunch.$(OBJEXT) \ @LIBS_ONLY_TRUE@ liblaunch_profile_a-libvproc.$(OBJEXT) \ @LIBS_ONLY_TRUE@ liblaunch_profile_a-libbootstrap.$(OBJEXT) \ @LIBS_ONLY_TRUE@ liblaunch_profile_a-protocol_vprocUser.$(OBJEXT) \ +@LIBS_ONLY_TRUE@ liblaunch_profile_a-launchd_ktrace.$(OBJEXT) \ @LIBS_ONLY_TRUE@ liblaunch_profile_a-__version.$(OBJEXT) liblaunch_profile_a_OBJECTS = $(am_liblaunch_profile_a_OBJECTS) am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libexecdir)" \ @@ -99,7 +102,7 @@ launchd_unix_ipc.c protocol_vprocServer.c notifyServer.c \ launchd_internalUser.c launchd_internalServer.c \ job_replyUser.c launchd_runtime.c launchd_runtime_kill.c \ - job_forwardUser.c mach_excServer.c + job_forwardUser.c mach_excServer.c launchd_ktrace.c @LIBS_ONLY_FALSE@am_launchd_OBJECTS = launchd-launchd.$(OBJEXT) \ @LIBS_ONLY_FALSE@ launchd-launchd_core_logic.$(OBJEXT) \ @LIBS_ONLY_FALSE@ launchd-launchd_unix_ipc.$(OBJEXT) \ @@ -111,7 +114,8 @@ @LIBS_ONLY_FALSE@ launchd-launchd_runtime.$(OBJEXT) \ @LIBS_ONLY_FALSE@ launchd-launchd_runtime_kill.$(OBJEXT) \ @LIBS_ONLY_FALSE@ launchd-job_forwardUser.$(OBJEXT) \ -@LIBS_ONLY_FALSE@ launchd-mach_excServer.$(OBJEXT) +@LIBS_ONLY_FALSE@ launchd-mach_excServer.$(OBJEXT) \ +@LIBS_ONLY_FALSE@ launchd-launchd_ktrace.$(OBJEXT) launchd_OBJECTS = $(am_launchd_OBJECTS) launchd_LDADD = $(LDADD) launchd_LINK = $(CCLD) $(launchd_CFLAGS) $(CFLAGS) $(launchd_LDFLAGS) \ @@ -253,9 +257,9 @@ @LIBS_ONLY_TRUE@noinst_LIBRARIES = liblaunch.a liblaunch_profile.a @LIBS_ONLY_TRUE@liblaunch_a_CFLAGS = -D__DARWIN_NON_CANCELABLE=1 $(AM_CFLAGS) -@LIBS_ONLY_TRUE@liblaunch_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c __version.c +@LIBS_ONLY_TRUE@liblaunch_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c launchd_ktrace.c __version.c @LIBS_ONLY_TRUE@liblaunch_profile_a_CFLAGS = -pg -D__DARWIN_NON_CANCELABLE=1 $(AM_CFLAGS) -@LIBS_ONLY_TRUE@liblaunch_profile_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c __version.c +@LIBS_ONLY_TRUE@liblaunch_profile_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c launchd_ktrace.c __version.c @LIBS_ONLY_FALSE@sysconf_DATA = hostconfig rc.common rc.netboot @LIBS_ONLY_FALSE@launchctl_CFLAGS = $(AM_CFLAGS) -isystem $(SDKROOT)/System/Library/Frameworks/System.framework/PrivateHeaders @LIBS_ONLY_FALSE@launchctl_LDFLAGS = $(AM_LDFLAGS) -framework CoreFoundation -framework IOKit $(LIBS_SECURITY) -weak_library /usr/lib/libedit.dylib @@ -264,7 +268,7 @@ @DO_EMBEDDED_MAGIC_FALSE@@LIBS_ONLY_FALSE@SystemStarter_SOURCES = StartupItems.c IPC.c SystemStarter.c @LIBS_ONLY_FALSE@launchd_CFLAGS = -mdynamic-no-pic $(AM_CFLAGS) @LIBS_ONLY_FALSE@launchd_LDFLAGS = $(AM_LDFLAGS) -lbsm -@LIBS_ONLY_FALSE@launchd_SOURCES = launchd.c launchd_core_logic.c launchd_unix_ipc.c protocol_vprocServer.c notifyServer.c launchd_internalUser.c launchd_internalServer.c job_replyUser.c launchd_runtime.c launchd_runtime_kill.c job_forwardUser.c mach_excServer.c +@LIBS_ONLY_FALSE@launchd_SOURCES = launchd.c launchd_core_logic.c launchd_unix_ipc.c protocol_vprocServer.c notifyServer.c launchd_internalUser.c launchd_internalServer.c job_replyUser.c launchd_runtime.c launchd_runtime_kill.c job_forwardUser.c mach_excServer.c launchd_ktrace.c @LIBS_ONLY_FALSE@launchproxy_LDFLAGS = $(AM_LDFLAGS) $(LIBS_SECURITY) @LIBS_ONLY_FALSE@man1_MANS = wait4path.1 launchctl.1 @LIBS_ONLY_FALSE@man5_MANS = launchd.plist.5 launchd.conf.5 @@ -433,6 +437,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchd-launchd_core_logic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchd-launchd_internalServer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchd-launchd_internalUser.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchd-launchd_ktrace.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchd-launchd_runtime.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchd-launchd_runtime_kill.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchd-launchd_unix_ipc.Po@am__quote@ @@ -441,11 +446,13 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchd-protocol_vprocServer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchproxy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch_a-__version.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch_a-launchd_ktrace.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch_a-libbootstrap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch_a-liblaunch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch_a-libvproc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch_a-protocol_vprocUser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch_profile_a-__version.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch_profile_a-launchd_ktrace.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch_profile_a-libbootstrap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch_profile_a-liblaunch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch_profile_a-libvproc.Po@am__quote@ @@ -522,6 +529,20 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_a_CFLAGS) $(CFLAGS) -c -o liblaunch_a-protocol_vprocUser.obj `if test -f 'protocol_vprocUser.c'; then $(CYGPATH_W) 'protocol_vprocUser.c'; else $(CYGPATH_W) '$(srcdir)/protocol_vprocUser.c'; fi` +liblaunch_a-launchd_ktrace.o: launchd_ktrace.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_a_CFLAGS) $(CFLAGS) -MT liblaunch_a-launchd_ktrace.o -MD -MP -MF $(DEPDIR)/liblaunch_a-launchd_ktrace.Tpo -c -o liblaunch_a-launchd_ktrace.o `test -f 'launchd_ktrace.c' || echo '$(srcdir)/'`launchd_ktrace.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liblaunch_a-launchd_ktrace.Tpo $(DEPDIR)/liblaunch_a-launchd_ktrace.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='launchd_ktrace.c' object='liblaunch_a-launchd_ktrace.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_a_CFLAGS) $(CFLAGS) -c -o liblaunch_a-launchd_ktrace.o `test -f 'launchd_ktrace.c' || echo '$(srcdir)/'`launchd_ktrace.c + +liblaunch_a-launchd_ktrace.obj: launchd_ktrace.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_a_CFLAGS) $(CFLAGS) -MT liblaunch_a-launchd_ktrace.obj -MD -MP -MF $(DEPDIR)/liblaunch_a-launchd_ktrace.Tpo -c -o liblaunch_a-launchd_ktrace.obj `if test -f 'launchd_ktrace.c'; then $(CYGPATH_W) 'launchd_ktrace.c'; else $(CYGPATH_W) '$(srcdir)/launchd_ktrace.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liblaunch_a-launchd_ktrace.Tpo $(DEPDIR)/liblaunch_a-launchd_ktrace.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='launchd_ktrace.c' object='liblaunch_a-launchd_ktrace.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_a_CFLAGS) $(CFLAGS) -c -o liblaunch_a-launchd_ktrace.obj `if test -f 'launchd_ktrace.c'; then $(CYGPATH_W) 'launchd_ktrace.c'; else $(CYGPATH_W) '$(srcdir)/launchd_ktrace.c'; fi` + liblaunch_a-__version.o: __version.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_a_CFLAGS) $(CFLAGS) -MT liblaunch_a-__version.o -MD -MP -MF $(DEPDIR)/liblaunch_a-__version.Tpo -c -o liblaunch_a-__version.o `test -f '__version.c' || echo '$(srcdir)/'`__version.c @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liblaunch_a-__version.Tpo $(DEPDIR)/liblaunch_a-__version.Po @@ -592,6 +613,20 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -c -o liblaunch_profile_a-protocol_vprocUser.obj `if test -f 'protocol_vprocUser.c'; then $(CYGPATH_W) 'protocol_vprocUser.c'; else $(CYGPATH_W) '$(srcdir)/protocol_vprocUser.c'; fi` +liblaunch_profile_a-launchd_ktrace.o: launchd_ktrace.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -MT liblaunch_profile_a-launchd_ktrace.o -MD -MP -MF $(DEPDIR)/liblaunch_profile_a-launchd_ktrace.Tpo -c -o liblaunch_profile_a-launchd_ktrace.o `test -f 'launchd_ktrace.c' || echo '$(srcdir)/'`launchd_ktrace.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liblaunch_profile_a-launchd_ktrace.Tpo $(DEPDIR)/liblaunch_profile_a-launchd_ktrace.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='launchd_ktrace.c' object='liblaunch_profile_a-launchd_ktrace.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -c -o liblaunch_profile_a-launchd_ktrace.o `test -f 'launchd_ktrace.c' || echo '$(srcdir)/'`launchd_ktrace.c + +liblaunch_profile_a-launchd_ktrace.obj: launchd_ktrace.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -MT liblaunch_profile_a-launchd_ktrace.obj -MD -MP -MF $(DEPDIR)/liblaunch_profile_a-launchd_ktrace.Tpo -c -o liblaunch_profile_a-launchd_ktrace.obj `if test -f 'launchd_ktrace.c'; then $(CYGPATH_W) 'launchd_ktrace.c'; else $(CYGPATH_W) '$(srcdir)/launchd_ktrace.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liblaunch_profile_a-launchd_ktrace.Tpo $(DEPDIR)/liblaunch_profile_a-launchd_ktrace.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='launchd_ktrace.c' object='liblaunch_profile_a-launchd_ktrace.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -c -o liblaunch_profile_a-launchd_ktrace.obj `if test -f 'launchd_ktrace.c'; then $(CYGPATH_W) 'launchd_ktrace.c'; else $(CYGPATH_W) '$(srcdir)/launchd_ktrace.c'; fi` + liblaunch_profile_a-__version.o: __version.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -MT liblaunch_profile_a-__version.o -MD -MP -MF $(DEPDIR)/liblaunch_profile_a-__version.Tpo -c -o liblaunch_profile_a-__version.o `test -f '__version.c' || echo '$(srcdir)/'`__version.c @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liblaunch_profile_a-__version.Tpo $(DEPDIR)/liblaunch_profile_a-__version.Po @@ -829,6 +864,20 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mach_excServer.c' object='launchd-mach_excServer.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(launchd_CFLAGS) $(CFLAGS) -c -o launchd-mach_excServer.obj `if test -f 'mach_excServer.c'; then $(CYGPATH_W) 'mach_excServer.c'; else $(CYGPATH_W) '$(srcdir)/mach_excServer.c'; fi` + +launchd-launchd_ktrace.o: launchd_ktrace.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(launchd_CFLAGS) $(CFLAGS) -MT launchd-launchd_ktrace.o -MD -MP -MF $(DEPDIR)/launchd-launchd_ktrace.Tpo -c -o launchd-launchd_ktrace.o `test -f 'launchd_ktrace.c' || echo '$(srcdir)/'`launchd_ktrace.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/launchd-launchd_ktrace.Tpo $(DEPDIR)/launchd-launchd_ktrace.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='launchd_ktrace.c' object='launchd-launchd_ktrace.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(launchd_CFLAGS) $(CFLAGS) -c -o launchd-launchd_ktrace.o `test -f 'launchd_ktrace.c' || echo '$(srcdir)/'`launchd_ktrace.c + +launchd-launchd_ktrace.obj: launchd_ktrace.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(launchd_CFLAGS) $(CFLAGS) -MT launchd-launchd_ktrace.obj -MD -MP -MF $(DEPDIR)/launchd-launchd_ktrace.Tpo -c -o launchd-launchd_ktrace.obj `if test -f 'launchd_ktrace.c'; then $(CYGPATH_W) 'launchd_ktrace.c'; else $(CYGPATH_W) '$(srcdir)/launchd_ktrace.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/launchd-launchd_ktrace.Tpo $(DEPDIR)/launchd-launchd_ktrace.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='launchd_ktrace.c' object='launchd-launchd_ktrace.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(launchd_CFLAGS) $(CFLAGS) -c -o launchd-launchd_ktrace.obj `if test -f 'launchd_ktrace.c'; then $(CYGPATH_W) 'launchd_ktrace.c'; else $(CYGPATH_W) '$(srcdir)/launchd_ktrace.c'; fi` install-man1: $(man1_MANS) $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" Modified: trunk/launchd/src/launchctl.c =================================================================== --- trunk/launchd/src/launchctl.c 2008-09-03 00:07:58 UTC (rev 23711) +++ trunk/launchd/src/launchctl.c 2008-09-17 18:41:18 UTC (rev 23712) @@ -1390,13 +1390,20 @@ } static void +exit_at_sigterm(int sig) +{ + if( sig == SIGTERM ) { + exit(EXIT_SUCCESS); + } +} + +static void system_specific_bootstrap(bool sflag) { int hnmib[] = { CTL_KERN, KERN_HOSTNAME }; struct kevent kev; int kq; - do_sysversion_sysctl(); do_single_user_mode(sflag); @@ -1419,6 +1426,11 @@ if (path_check("/etc/rc.cdrom")) { const char *rccdrom_tool[] = { _PATH_BSHELL, "/etc/rc.cdrom", "multiuser", NULL }; + + /* The bootstrapper should always be killable during install-time (rdar://problem/6103485). + * This is a special case for /etc/rc.cdrom, which runs a process and never exits. + */ + assumes(signal(SIGTERM, exit_at_sigterm) != SIG_ERR); assumes(fwexec(rccdrom_tool, NULL) != -1); assumes(reboot(RB_HALT) != -1); _exit(EXIT_FAILURE); Modified: trunk/launchd/src/launchd.c =================================================================== --- trunk/launchd/src/launchd.c 2008-09-03 00:07:58 UTC (rev 23711) +++ trunk/launchd/src/launchd.c 2008-09-17 18:41:18 UTC (rev 23712) @@ -82,7 +82,6 @@ #define LAUNCHD_CONF ".launchd.conf" #define SECURITY_LIB "/System/Library/Frameworks/Security.framework/Versions/A/Security" - extern char **environ; INTERNAL_ABI static void pfsystem_callback(void *, struct kevent *); @@ -107,6 +106,7 @@ bool shutdown_in_progress; bool fake_shutdown_in_progress; bool network_up; +char g_username[128] = "__UnknownUserToLaunchd_DontPanic_NotImportant__"; int main(int argc, char *const *argv) @@ -157,6 +157,17 @@ pid1_magic_init(); } else { ipc_server_init(); + + runtime_log_push(); + + int64_t now = runtime_get_wall_time(); + + struct passwd *pwent = getpwuid(getuid()); + if( pwent ) { + strlcpy(g_username, pwent->pw_name, sizeof(g_username) - 1); + } + + runtime_syslog(LOG_NOTICE, "Per-user launchd for UID %u (%s) began at: %lld.%06llu", getuid(), g_username, now / USEC_PER_SEC, now % USEC_PER_SEC); } monitor_networking_state(); @@ -301,7 +312,8 @@ now = runtime_get_wall_time(); - runtime_syslog(LOG_NOTICE, "Shutdown began at: %lld.%06llu", now / USEC_PER_SEC, now % USEC_PER_SEC); + char *term_who = pid1_magic ? "System shutdown" : "Per-user launchd termination"; + runtime_syslog(LOG_NOTICE, "%s began at: %lld.%06llu", term_who, now / USEC_PER_SEC, now % USEC_PER_SEC); launchd_assert(jobmgr_shutdown(root_jobmgr) != NULL); } Modified: trunk/launchd/src/launchd.h =================================================================== --- trunk/launchd/src/launchd.h 2008-09-03 00:07:58 UTC (rev 23711) +++ trunk/launchd/src/launchd.h 2008-09-17 18:41:18 UTC (rev 23712) @@ -32,6 +32,7 @@ extern bool shutdown_in_progress; extern bool fake_shutdown_in_progress; extern bool network_up; +extern bool g_force_old_kill_path; INTERNAL_ABI bool init_check_pid(pid_t); Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-09-03 00:07:58 UTC (rev 23711) +++ trunk/launchd/src/launchd_core_logic.c 2008-09-17 18:41:18 UTC (rev 23712) @@ -619,7 +619,7 @@ return; } - if (j->kill_via_shmem) { + if (j->kill_via_shmem && !g_force_old_kill_path) { if (j->shmem) { if (!j->sent_kill_via_shmem) { j->shmem->vp_shmem_flags |= VPROC_SHMEM_EXITING; @@ -631,6 +631,8 @@ } else { newval = -1; } + } else if( j->kill_via_shmem ) { + job_log(j, LOG_DEBUG, "Stopping transactional job the old-fashioned way."); } j->sent_signal_time = runtime_get_opaque_time(); @@ -1861,7 +1863,7 @@ case 'E': if (strcasecmp(key, LAUNCH_JOBKEY_ENVIRONMENTVARIABLES) == 0) { launch_data_dict_iterate(value, envitem_setup, j); - } + } break; case 'u': case 'U': @@ -3493,6 +3495,10 @@ setenv(ei->key, ei->value, 1); } + if( do_apple_internal_logging ) { + setenv(LAUNCHD_DO_APPLE_INTERNAL_LOGGING, "true", 1); + } + /* * We'd like to call setsid() unconditionally, but we have reason to * believe that prevents launchd from being able to send signals to @@ -4214,7 +4220,7 @@ return; } - if( strncmp(LAUNCHD_TRUSTED_FD_ENV, key, sizeof(LAUNCHD_TRUSTED_FD_ENV) - 1) ) { + if( strncmp(LAUNCHD_TRUSTED_FD_ENV, key, sizeof(LAUNCHD_TRUSTED_FD_ENV) - 1) != 0 ) { envitem_new(j, key, launch_data_get_string(obj), j->importing_global_env); } else { job_log(j, LOG_WARNING, "Ignoring reserved environmental variable: %s", key); @@ -5020,6 +5026,7 @@ snprintf(thelabel, sizeof(thelabel), "com.apple.launchctl.%s", session_type); bootstrapper = job_new(jm, thelabel, NULL, bootstrap_tool); + if (jobmgr_assumes(jm, bootstrapper != NULL) && (jm->parentmgr || getuid())) { char buf[100]; @@ -6134,7 +6141,7 @@ } else { job_log(j, LOG_DEBUG, "Now participating in transaction model."); j->kill_via_shmem = (bool)inval; - job_log(j, LOG_DEBUG, "j->kill_via_shmem = %s", j->kill_via_shmem ? "YES" : "NO"); + job_log(j, LOG_DEBUG, "j->kill_via_shmem = %s", j->kill_via_shmem ? "true" : "false"); } case 0: break; Added: trunk/launchd/src/launchd_ktrace.c =================================================================== --- trunk/launchd/src/launchd_ktrace.c (rev 0) +++ trunk/launchd/src/launchd_ktrace.c 2008-09-17 18:41:18 UTC (rev 23712) @@ -0,0 +1,34 @@ +#include "launchd_ktrace.h" + +INTERNAL_ABI void +runtime_ktrace1(runtime_ktrace_code_t code) +{ + void *ra = __builtin_extract_return_addr(__builtin_return_address(1)); + + /* This syscall returns EINVAL when the trace isn't enabled. */ + if (do_apple_internal_logging) { + syscall(180, code, 0, 0, 0, (long)ra); + } +} + +INTERNAL_ABI void +runtime_ktrace0(runtime_ktrace_code_t code) +{ + void *ra = __builtin_extract_return_addr(__builtin_return_address(0)); + + /* This syscall returns EINVAL when the trace isn't enabled. */ + if (do_apple_internal_logging) { + syscall(180, code, 0, 0, 0, (long)ra); + } +} + +INTERNAL_ABI void +runtime_ktrace(runtime_ktrace_code_t code, long a, long b, long c) +{ + void *ra = __builtin_extract_return_addr(__builtin_return_address(0)); + + /* This syscall returns EINVAL when the trace isn't enabled. */ + if (do_apple_internal_logging) { + syscall(180, code, a, b, c, (long)ra); + } +} Added: trunk/launchd/src/launchd_ktrace.h =================================================================== --- trunk/launchd/src/launchd_ktrace.h (rev 0) +++ trunk/launchd/src/launchd_ktrace.h 2008-09-17 18:41:18 UTC (rev 23712) @@ -0,0 +1,43 @@ +#ifndef __LAUNCHD_KTRACE_H__ +#define __LAUNCHD_KTRACE_H__ + +#include <unistd.h> +#include <stdbool.h> + +extern bool do_apple_internal_logging; + +#ifdef __i386__ + #define INTERNAL_ABI __attribute__((regparm(3))) /* Enable register-passing for the first 3 arguments on i386. */ +#else + #define INTERNAL_ABI +#endif + +#ifndef DBG_LAUNCHD + #define DBG_LAUNCHD 34 +#endif + +/* Class(8) | SubClass(8) | Code(14) | Qual(2) */ +#define RTKT_CODE(c) ((DBG_LAUNCHD << 24) | (((c) & 0x3fffff) << 2)) + +typedef enum { + RTKT_LAUNCHD_STARTING = RTKT_CODE(1), + RTKT_LAUNCHD_EXITING = RTKT_CODE(2), + RTKT_LAUNCHD_FINDING_STRAY_PG = RTKT_CODE(3), + RTKT_LAUNCHD_FINDING_ALL_STRAYS = RTKT_CODE(4), + RTKT_LAUNCHD_FINDING_EXECLESS = RTKT_CODE(5), + RTKT_LAUNCHD_FINDING_WEIRD_UIDS = RTKT_CODE(6), + RTKT_LAUNCHD_DATA_PACK = RTKT_CODE(7), + RTKT_LAUNCHD_DATA_UNPACK = RTKT_CODE(8), + RTKT_LAUNCHD_BUG = RTKT_CODE(9), + RTKT_LAUNCHD_MACH_IPC = RTKT_CODE(10), + RTKT_LAUNCHD_BSD_KEVENT = RTKT_CODE(11), + RTKT_VPROC_TRANSACTION_INCREMENT = RTKT_CODE(12), + RTKT_VPROC_TRANSACTION_DECREMENT = RTKT_CODE(13), +} runtime_ktrace_code_t; + +/* All of these log the return address as "arg4" */ +INTERNAL_ABI void runtime_ktrace1(runtime_ktrace_code_t code); +INTERNAL_ABI void runtime_ktrace0(runtime_ktrace_code_t code); +INTERNAL_ABI void runtime_ktrace(runtime_ktrace_code_t code, long a, long b, long c); + +#endif /* __LAUNCHD_KTRACE_H__ */ Modified: trunk/launchd/src/launchd_runtime.c =================================================================== --- trunk/launchd/src/launchd_runtime.c 2008-09-03 00:07:58 UTC (rev 23711) +++ trunk/launchd/src/launchd_runtime.c 2008-09-17 18:41:18 UTC (rev 23712) @@ -130,8 +130,8 @@ bool pid1_magic; bool do_apple_internal_logging; bool low_level_debug; +bool g_force_old_kill_path = false; - INTERNAL_ABI mach_port_t runtime_get_kernel_port(void) { @@ -1357,39 +1357,6 @@ } INTERNAL_ABI void -runtime_ktrace1(runtime_ktrace_code_t code) -{ - void *ra = __builtin_extract_return_addr(__builtin_return_address(1)); - - /* This syscall returns EINVAL when the trace isn't enabled. */ - if (do_apple_internal_logging) { - syscall(180, code, 0, 0, 0, (long)ra); - } -} - -INTERNAL_ABI void -runtime_ktrace0(runtime_ktrace_code_t code) -{ - void *ra = __builtin_extract_return_addr(__builtin_return_address(0)); - - /* This syscall returns EINVAL when the trace isn't enabled. */ - if (do_apple_internal_logging) { - syscall(180, code, 0, 0, 0, (long)ra); - } -} - -INTERNAL_ABI void -runtime_ktrace(runtime_ktrace_code_t code, long a, long b, long c) -{ - void *ra = __builtin_extract_return_addr(__builtin_return_address(0)); - - /* This syscall returns EINVAL when the trace isn't enabled. */ - if (do_apple_internal_logging) { - syscall(180, code, a, b, c, (long)ra); - } -} - -INTERNAL_ABI void runtime_log_push(void) { static pthread_mutex_t ourlock = PTHREAD_MUTEX_INITIALIZER; @@ -1726,4 +1693,8 @@ internal_mask_pri = LOG_UPTO(LOG_DEBUG); low_level_debug = true; } + + if( stat("/var/db/.launchd_disable_sudden_termination", &sb) == 0 ) { + g_force_old_kill_path = true; + } } Modified: trunk/launchd/src/launchd_runtime.h =================================================================== --- trunk/launchd/src/launchd_runtime.h 2008-09-03 00:07:58 UTC (rev 23711) +++ trunk/launchd/src/launchd_runtime.h 2008-09-17 18:41:18 UTC (rev 23712) @@ -29,6 +29,7 @@ #include <syslog.h> #include "launchd_runtime_kill.h" +#include "launchd_ktrace.h" #if 0 @@ -104,8 +105,8 @@ typedef INTERNAL_ABI void (*timeout_callback)(void); extern bool pid1_magic; -extern bool do_apple_internal_logging; extern bool low_level_debug; +extern char g_username[128]; INTERNAL_ABI mach_port_t runtime_get_kernel_port(void); @@ -142,33 +143,6 @@ INTERNAL_ABI kern_return_t runtime_log_forward(uid_t forward_uid, gid_t forward_gid, vm_offset_t inval, mach_msg_type_number_t invalCnt); INTERNAL_ABI kern_return_t runtime_log_drain(mach_port_t srp, vm_offset_t *outval, mach_msg_type_number_t *outvalCnt); -#ifndef DBG_LAUNCHD -#define DBG_LAUNCHD 34 -#endif - -/* Class(8) | SubClass(8) | Code(14) | Qual(2) */ -#define RTKT_CODE(c) ((DBG_LAUNCHD << 24) | (((c) & 0x3fffff) << 2)) - -typedef enum { - RTKT_LAUNCHD_STARTING = RTKT_CODE(1), - RTKT_LAUNCHD_EXITING = RTKT_CODE(2), - RTKT_LAUNCHD_FINDING_STRAY_PG = RTKT_CODE(3), - RTKT_LAUNCHD_FINDING_ALL_STRAYS = RTKT_CODE(4), - RTKT_LAUNCHD_FINDING_EXECLESS = RTKT_CODE(5), - RTKT_LAUNCHD_FINDING_WEIRD_UIDS = RTKT_CODE(6), - RTKT_LAUNCHD_DATA_PACK = RTKT_CODE(7), - RTKT_LAUNCHD_DATA_UNPACK = RTKT_CODE(8), - RTKT_LAUNCHD_BUG = RTKT_CODE(9), - RTKT_LAUNCHD_MACH_IPC = RTKT_CODE(10), - RTKT_LAUNCHD_BSD_KEVENT = RTKT_CODE(11), -} runtime_ktrace_code_t; - -/* All of these log the return address as "arg4" */ -INTERNAL_ABI void runtime_ktrace1(runtime_ktrace_code_t code); -INTERNAL_ABI void runtime_ktrace0(runtime_ktrace_code_t code); -INTERNAL_ABI void runtime_ktrace(runtime_ktrace_code_t code, long a, long b, long c); - - #define LOG_APPLEONLY 0x4141504c /* AAPL in hex */ struct runtime_syslog_attr { Modified: trunk/launchd/src/liblaunch.c =================================================================== --- trunk/launchd/src/liblaunch.c 2008-09-03 00:07:58 UTC (rev 23711) +++ trunk/launchd/src/liblaunch.c 2008-09-17 18:41:18 UTC (rev 23712) @@ -22,6 +22,7 @@ #include "liblaunch_public.h" #include "liblaunch_private.h" #include "liblaunch_internal.h" +#include "launchd_ktrace.h" #include <mach/mach.h> #include <libkern/OSByteOrder.h> @@ -169,6 +170,8 @@ static launch_t in_flight_msg_recv_client; static pthread_once_t _lc_once = PTHREAD_ONCE_INIT; +bool do_apple_internal_logging = false; + static struct _launch_client { pthread_mutex_t mtx; launch_t l; Modified: trunk/launchd/src/liblaunch_private.h =================================================================== --- trunk/launchd/src/liblaunch_private.h 2008-09-03 00:07:58 UTC (rev 23711) +++ trunk/launchd/src/liblaunch_private.h 2008-09-17 18:41:18 UTC (rev 23712) @@ -30,38 +30,39 @@ __BEGIN_DECLS -#define LAUNCH_KEY_SETUSERENVIRONMENT "SetUserEnvironment" -#define LAUNCH_KEY_UNSETUSERENVIRONMENT "UnsetUserEnvironment" -#define LAUNCH_KEY_SHUTDOWN "Shutdown" -#define LAUNCH_KEY_SINGLEUSER "SingleUser" -#define LAUNCH_KEY_GETRESOURCELIMITS "GetResourceLimits" -#define LAUNCH_KEY_SETRESOURCELIMITS "SetResourceLimits" -#define LAUNCH_KEY_GETRUSAGESELF "GetResourceUsageSelf" -#define LAUNCH_KEY_GETRUSAGECHILDREN "GetResourceUsageChildren" +#define LAUNCH_KEY_SETUSERENVIRONMENT "SetUserEnvironment" +#define LAUNCH_KEY_UNSETUSERENVIRONMENT "UnsetUserEnvironment" +#define LAUNCH_KEY_SHUTDOWN "Shutdown" +#define LAUNCH_KEY_SINGLEUSER "SingleUser" +#define LAUNCH_KEY_GETRESOURCELIMITS "GetResourceLimits" +#define LAUNCH_KEY_SETRESOURCELIMITS "SetResourceLimits" +#define LAUNCH_KEY_GETRUSAGESELF "GetResourceUsageSelf" +#define LAUNCH_KEY_GETRUSAGECHILDREN "GetResourceUsageChildren" + +#define LAUNCHD_SOCKET_ENV "LAUNCHD_SOCKET" +#define LAUNCHD_SOCK_PREFIX _PATH_VARTMP "launchd" +#define LAUNCHD_TRUSTED_FD_ENV "__LAUNCHD_FD" +#define LAUNCHD_ASYNC_MSG_KEY "_AsyncMessage" +#define LAUNCH_KEY_BATCHCONTROL "BatchControl" +#define LAUNCH_KEY_BATCHQUERY "BatchQuery" +#define LAUNCHD_DO_APPLE_INTERNAL_LOGGING "__DoAppleInternalLogging__" + +#define LAUNCH_JOBKEY_TRANSACTIONCOUNT "TransactionCount" +#define LAUNCH_JOBKEY_QUARANTINEDATA "QuarantineData" +#define LAUNCH_JOBKEY_SANDBOXPROFILE "SandboxProfile" +#define LAUNCH_JOBKEY_SANDBOXFLAGS "SandboxFlags" +#define LAUNCH_JOBKEY_SANDBOX_NAMED "Named" -#define LAUNCHD_SOCKET_ENV "LAUNCHD_SOCKET" -#define LAUNCHD_SOCK_PREFIX _PATH_VARTMP "launchd" -#define LAUNCHD_TRUSTED_FD_ENV "__LAUNCHD_FD" -#define LAUNCHD_ASYNC_MSG_KEY "_AsyncMessage" -#define LAUNCH_KEY_BATCHCONTROL "BatchControl" -#define LAUNCH_KEY_BATCHQUERY "BatchQuery" +#define LAUNCH_JOBKEY_ENTERKERNELDEBUGGERBEFOREKILL "EnterKernelDebuggerBeforeKill" +#define LAUNCH_JOBKEY_PERJOBMACHSERVICES "PerJobMachServices" +#define LAUNCH_JOBKEY_SERVICEIPC "ServiceIPC" +#define LAUNCH_JOBKEY_BINARYORDERPREFERENCE "BinaryOrderPreference" +#define LAUNCH_JOBKEY_MACHEXCEPTIONHANDLER "MachExceptionHandler" -#define LAUNCH_JOBKEY_TRANSACTIONCOUNT "TransactionCount" -#define LAUNCH_JOBKEY_QUARANTINEDATA "QuarantineData" -#define LAUNCH_JOBKEY_SANDBOXPROFILE "SandboxProfile" -#define LAUNCH_JOBKEY_SANDBOXFLAGS "SandboxFlags" -#define LAUNCH_JOBKEY_SANDBOX_NAMED "Named" - -#define LAUNCH_JOBKEY_ENTERKERNELDEBUGGERBEFOREKILL "EnterKernelDebuggerBeforeKill" -#define LAUNCH_JOBKEY_PERJOBMACHSERVICES "PerJobMachServices" -#define LAUNCH_JOBKEY_SERVICEIPC "ServiceIPC" -#define LAUNCH_JOBKEY_BINARYORDERPREFERENCE "BinaryOrderPreference" -#define LAUNCH_JOBKEY_MACHEXCEPTIONHANDLER "MachExceptionHandler" - -#define LAUNCH_JOBKEY_MACH_KUNCSERVER "kUNCServer" -#define LAUNCH_JOBKEY_MACH_EXCEPTIONSERVER "ExceptionServer" -#define LAUNCH_JOBKEY_MACH_TASKSPECIALPORT "TaskSpecialPort" -#define LAUNCH_JOBKEY_MACH_HOSTSPECIALPORT "HostSpecialPort" +#define LAUNCH_JOBKEY_MACH_KUNCSERVER "kUNCServer" +#define LAUNCH_JOBKEY_MACH_EXCEPTIONSERVER "ExceptionServer" +#define LAUNCH_JOBKEY_MACH_TASKSPECIALPORT "TaskSpecialPort" +#define LAUNCH_JOBKEY_MACH_HOSTSPECIALPORT "HostSpecialPort" #define LAUNCH_JOBKEY_MACH_ENTERKERNELDEBUGGERONCLOSE "EnterKernelDebuggerOnClose" typedef struct _launch *launch_t; Modified: trunk/launchd/src/liblaunch_public.h =================================================================== --- trunk/launchd/src/liblaunch_public.h 2008-09-03 00:07:58 UTC (rev 23711) +++ trunk/launchd/src/liblaunch_public.h 2008-09-17 18:41:18 UTC (rev 23712) @@ -44,109 +44,109 @@ #endif -#define LAUNCH_KEY_SUBMITJOB "SubmitJob" -#define LAUNCH_KEY_REMOVEJOB "RemoveJob" -#define LAUNCH_KEY_STARTJOB "StartJob" -#define LAUNCH_KEY_STOPJOB "StopJob" -#define LAUNCH_KEY_GETJOB "GetJob" -#define LAUNCH_KEY_GETJOBS "GetJobs" -#define LAUNCH_KEY_CHECKIN "CheckIn" +#define LAUNCH_KEY_SUBMITJOB "SubmitJob" +#define LAUNCH_KEY_REMOVEJOB "RemoveJob" +#define LAUNCH_KEY_STARTJOB "StartJob" +#define LAUNCH_KEY_STOPJOB "StopJob" +#define LAUNCH_KEY_GETJOB "GetJob" +#define LAUNCH_KEY_GETJOBS "GetJobs" +#define LAUNCH_KEY_CHECKIN "CheckIn" -#define LAUNCH_JOBKEY_LABEL "Label" -#define LAUNCH_JOBKEY_DISABLED "Disabled" -#define LAUNCH_JOBKEY_USERNAME "UserName" -#define LAUNCH_JOBKEY_GROUPNAME "GroupName" -#define LAUNCH_JOBKEY_TIMEOUT "TimeOut" -#define LAUNCH_JOBKEY_EXITTIMEOUT "ExitTimeOut" -#define LAUNCH_JOBKEY_INITGROUPS "InitGroups" -#define LAUNCH_JOBKEY_SOCKETS "Sockets" -#define LAUNCH_JOBKEY_MACHSERVICES "MachServices" +#define LAUNCH_JOBKEY_LABEL "Label" +#define LAUNCH_JOBKEY_DISABLED "Disabled" +#define LAUNCH_JOBKEY_USERNAME "UserName" +#define LAUNCH_JOBKEY_GROUPNAME "GroupName" +#define LAUNCH_JOBKEY_TIMEOUT "TimeOut" +#define LAUNCH_JOBKEY_EXITTIMEOUT "ExitTimeOut" +#define LAUNCH_JOBKEY_INITGROUPS "InitGroups" +#define LAUNCH_JOBKEY_SOCKETS "Sockets" +#define LAUNCH_JOBKEY_MACHSERVICES "MachServices" #define LAUNCH_JOBKEY_MACHSERVICELOOKUPPOLICIES "MachServiceLookupPolicies" -#define LAUNCH_JOBKEY_INETDCOMPATIBILITY "inetdCompatibility" -#define LAUNCH_JOBKEY_ENABLEGLOBBING "EnableGlobbing" -#define LAUNCH_JOBKEY_PROGRAMARGUMENTS "ProgramArguments" -#define LAUNCH_JOBKEY_PROGRAM "Program" -#define LAUNCH_JOBKEY_ONDEMAND "OnDemand" -#define LAUNCH_JOBKEY_KEEPALIVE "KeepAlive" -#define LAUNCH_JOBKEY_LIMITLOADTOHOSTS "LimitLoadToHosts" -#define LAUNCH_JOBKEY_LIMITLOADFROMHOSTS "LimitLoadFromHosts" +#define LAUNCH_JOBKEY_INETDCOMPATIBILITY "inetdCompatibility" +#define LAUNCH_JOBKEY_ENABLEGLOBBING "EnableGlobbing" +#define LAUNCH_JOBKEY_PROGRAMARGUMENTS "ProgramArguments" +#define LAUNCH_JOBKEY_PROGRAM "Program" +#define LAUNCH_JOBKEY_ONDEMAND "OnDemand" +#define LAUNCH_JOBKEY_KEEPALIVE "KeepAlive" +#define LAUNCH_JOBKEY_LIMITLOADTOHOSTS "LimitLoadToHosts" +#define LAUNCH_JOBKEY_LIMITLOADFROMHOSTS "LimitLoadFromHosts" #define LAUNCH_JOBKEY_LIMITLOADTOSESSIONTYPE "LimitLoadToSessionType" -#define LAUNCH_JOBKEY_RUNATLOAD "RunAtLoad" -#define LAUNCH_JOBKEY_ROOTDIRECTORY "RootDirectory" -#define LAUNCH_JOBKEY_WORKINGDIRECTORY "WorkingDirectory" -#define LAUNCH_JOBKEY_ENVIRONMENTVARIABLES "EnvironmentVariables" +#define LAUNCH_JOBKEY_RUNATLOAD "RunAtLoad" +#define LAUNCH_JOBKEY_ROOTDIRECTORY "RootDirectory" +#define LAUNCH_JOBKEY_WORKINGDIRECTORY "WorkingDirectory" +#define LAUNCH_JOBKEY_ENVIRONMENTVARIABLES "EnvironmentVariables" #define LAUNCH_JOBKEY_USERENVIRONMENTVARIABLES "UserEnvironmentVariables" -#define LAUNCH_JOBKEY_UMASK "Umask" -#define LAUNCH_JOBKEY_NICE "Nice" -#define LAUNCH_JOBKEY_HOPEFULLYEXITSFIRST "HopefullyExitsFirst" -#define LAUNCH_JOBKEY_HOPEFULLYEXITSLAST "HopefullyExitsLast" -#define LAUNCH_JOBKEY_LOWPRIORITYIO "LowPriorityIO" -#define LAUNCH_JOBKEY_SESSIONCREATE "SessionCreate" -#define LAUNCH_JOBKEY_STARTONMOUNT "StartOnMount" -#define LAUNCH_JOBKEY_SOFTRESOURCELIMITS "SoftResourceLimits" -#define LAUNCH_JOBKEY_HARDRESOURCELIMITS "HardResourceLimits" -#define LAUNCH_JOBKEY_STANDARDINPATH "StandardInPath" -#define LAUNCH_JOBKEY_STANDARDOUTPATH "StandardOutPath" -#define LAUNCH_JOBKEY_STANDARDERRORPATH "StandardErrorPath" -#define LAUNCH_JOBKEY_DEBUG "Debug" -#define LAUNCH_JOBKEY_WAITFORDEBUGGER "WaitForDebugger" -#define LAUNCH_JOBKEY_QUEUEDIRECTORIES "QueueDirectories" -#define LAUNCH_JOBKEY_WATCHPATHS "WatchPaths" -#define LAUNCH_JOBKEY_STARTINTERVAL "StartInterval" -#define LAUNCH_JOBKEY_STARTCALENDARINTERVAL "StartCalendarInterval" -#define LAUNCH_JOBKEY_BONJOURFDS "BonjourFDs" -#define LAUNCH_JOBKEY_LASTEXITSTATUS "LastExitStatus" -#define LAUNCH_JOBKEY_PID "PID" -#define LAUNCH_JOBKEY_THROTTLEINTERVAL "ThrottleInterval" -#define LAUNCH_JOBKEY_LAUNCHONLYONCE "LaunchOnlyOnce" -#define LAUNCH_JOBKEY_ABANDONPROCESSGROUP "AbandonProcessGroup" -#define LAUNCH_JOBKEY_POLICIES "Policies" -#define LAUNCH_JOBKEY_ENABLETRANSACTIONS "EnableTransactions" +#define LAUNCH_JOBKEY_UMASK "Umask" +#define LAUNCH_JOBKEY_NICE "Nice" +#define LAUNCH_JOBKEY_HOPEFULLYEXITSFIRST "HopefullyExitsFirst" +#define LAUNCH_JOBKEY_HOPEFULLYEXITSLAST "HopefullyExitsLast" +#define LAUNCH_JOBKEY_LOWPRIORITYIO "LowPriorityIO" +#define LAUNCH_JOBKEY_SESSIONCREATE "SessionCreate" +#define LAUNCH_JOBKEY_STARTONMOUNT "StartOnMount" +#define LAUNCH_JOBKEY_SOFTRESOURCELIMITS "SoftResourceLimits" +#define LAUNCH_JOBKEY_HARDRESOURCELIMITS "HardResourceLimits" +#define LAUNCH_JOBKEY_STANDARDINPATH "StandardInPath" +#define LAUNCH_JOBKEY_STANDARDOUTPATH "StandardOutPath" +#define LAUNCH_JOBKEY_STANDARDERRORPATH "StandardErrorPath" +#define LAUNCH_JOBKEY_DEBUG "Debug" +#define LAUNCH_JOBKEY_WAITFORDEBUGGER "WaitForDebugger" +#define LAUNCH_JOBKEY_QUEUEDIRECTORIES "QueueDirectories" +#define LAUNCH_JOBKEY_WATCHPATHS "WatchPaths" +#define LAUNCH_JOBKEY_STARTINTERVAL "StartInterval" +#define LAUNCH_JOBKEY_STARTCALENDARINTERVAL "StartCalendarInterval" +#define LAUNCH_JOBKEY_BONJOURFDS "BonjourFDs" +#define LAUNCH_JOBKEY_LASTEXITSTATUS "LastExitStatus" +#define LAUNCH_JOBKEY_PID "PID" +#define LAUNCH_JOBKEY_THROTTLEINTERVAL "ThrottleInterval" +#define LAUNCH_JOBKEY_LAUNCHONLYONCE "LaunchOnlyOnce" +#define LAUNCH_JOBKEY_ABANDONPROCESSGROUP "AbandonProcessGroup" +#define LAUNCH_JOBKEY_POLICIES "Policies" +#define LAUNCH_JOBKEY_ENABLETRANSACTIONS "EnableTransactions" #define LAUNCH_JOBPOLICY_DENYCREATINGOTHERJOBS "DenyCreatingOtherJobs" -#define LAUNCH_JOBINETDCOMPATIBILITY_WAIT "Wait" +#define LAUNCH_JOBINETDCOMPATIBILITY_WAIT "Wait" -#define LAUNCH_JOBKEY_MACH_RESETATCLOSE "ResetAtClose" -#define LAUNCH_JOBKEY_MACH_HIDEUNTILCHECKIN "HideUntilCheckIn" +#define LAUNCH_JOBKEY_MACH_RESETATCLOSE "ResetAtClose" +#define LAUNCH_JOBKEY_MACH_HIDEUNTILCHECKIN "HideUntilCheckIn" #define LAUNCH_JOBKEY_KEEPALIVE_SUCCESSFULEXIT "SuccessfulExit" #define LAUNCH_JOBKEY_KEEPALIVE_NETWORKSTATE "NetworkState" -#define LAUNCH_JOBKEY_KEEPALIVE_PATHSTATE "PathState" +#define LAUNCH_JOBKEY_KEEPALIVE_PATHSTATE "PathState" #define LAUNCH_JOBKEY_KEEPALIVE_OTHERJOBACTIVE "OtherJobActive" #define LAUNCH_JOBKEY_KEEPALIVE_OTHERJOBENABLED "OtherJobEnabled" -#define LAUNCH_JOBKEY_CAL_MINUTE "Minute" -#define LAUNCH_JOBKEY_CAL_HOUR "Hour" -#define LAUNCH_JOBKEY_CAL_DAY "Day" -#define LAUNCH_JOBKEY_CAL_WEEKDAY "Weekday" -#define LAUNCH_JOBKEY_CAL_MONTH "Month" +#define LAUNCH_JOBKEY_CAL_MINUTE "Minute" +#define LAUNCH_JOBKEY_CAL_HOUR "Hour" +#define LAUNCH_JOBKEY_CAL_DAY "Day" +#define LAUNCH_JOBKEY_CAL_WEEKDAY "Weekday" +#define LAUNCH_JOBKEY_CAL_MONTH "Month" + +#define LAUNCH_JOBKEY_RESOURCELIMIT_CORE "Core" +#define LAUNCH_JOBKEY_RESOURCELIMIT_CPU "CPU" +#define LAUNCH_JOBKEY_RESOURCELIMIT_DATA "Data" +#define LAUNCH_JOBKEY_RESOURCELIMIT_FSIZE "FileSize" +#define LAUNCH_JOBKEY_RESOURCELIMIT_MEMLOCK "MemoryLock" +#define LAUNCH_JOBKEY_RESOURCELIMIT_NOFILE "NumberOfFiles" +#define LAUNCH_JOBKEY_RESOURCELIMIT_NPROC "NumberOfProcesses" +#define LAUNCH_JOBKEY_RESOURCELIMIT_RSS "ResidentSetSize" +#define LAUNCH_JOBKEY_RESOURCELIMIT_STACK "Stack" -#define LAUNCH_JOBKEY_RESOURCELIMIT_CORE "Core" -#define LAUNCH_JOBKEY_RESOURCELIMIT_CPU "CPU" -#define LAUNCH_JOBKEY_RESOURCELIMIT_DATA "Data" -#define LAUNCH_JOBKEY_RESOURCELIMIT_FSIZE "FileSize" -#define LAUNCH_JOBKEY_RESOURCELIMIT_MEMLOCK "MemoryLock" -#define LAUNCH_JOBKEY_RESOURCELIMIT_NOFILE "NumberOfFiles" -#define LAUNCH_JOBKEY_RESOURCELIMIT_NPROC "NumberOfProcesses" -#define LAUNCH_JOBKEY_RESOURCELIMIT_RSS "ResidentSetSize" -#define LAUNCH_JOBKEY_RESOURCELIMIT_STACK "Stack" +#define LAUNCH_JOBKEY_DISABLED_MACHINETYPE "MachineType" +#define LAUNCH_JOBKEY_DISABLED_MODELNAME "ModelName" -#define LAUNCH_JOBKEY_DISABLED_MACHINETYPE "MachineType" -#define LAUNCH_JOBKEY_DISABLED_MODELNAME "ModelName" +#define LAUNCH_JOBSOCKETKEY_TYPE "SockType" +#define LAUNCH_JOBSOCKETKEY_PASSIVE "SockPassive" +#define LAUNCH_JOBSOCKETKEY_BONJOUR "Bonjour" +#define LAUNCH_JOBSOCKETKEY_SECUREWITHKEY "SecureSocketWithKey" +#define LAUNCH_JOBSOCKETKEY_PATHNAME "SockPathName" +#define LAUNCH_JOBSOCKETKEY_PATHMODE "SockPathMode" +#define LAUNCH_JOBSOCKETKEY_NODENAME "SockNodeName" +#define LAUNCH_JOBSOCKETKEY_SERVICENAME "SockServiceName" +#define LAUNCH_JOBSOCKETKEY_FAMILY "SockFamily" +#define LAUNCH_JOBSOCKETKEY_PROTOCOL "SockProtocol" +#define LAUNCH_JOBSOCKETKEY_MULTICASTGROUP "MulticastGroup" -#define LAUNCH_JOBSOCKETKEY_TYPE "SockType" -#define LAUNCH_JOBSOCKETKEY_PASSIVE "SockPassive" -#define LAUNCH_JOBSOCKETKEY_BONJOUR "Bonjour" -#define LAUNCH_JOBSOCKETKEY_SECUREWITHKEY "SecureSocketWithKey" -#define LAUNCH_JOBSOCKETKEY_PATHNAME "SockPathName" -#define LAUNCH_JOBSOCKETKEY_PATHMODE "SockPathMode" -#define LAUNCH_JOBSOCKETKEY_NODENAME "SockNodeName" -#define LAUNCH_JOBSOCKETKEY_SERVICENAME "SockServiceName" -#define LAUNCH_JOBSOCKETKEY_FAMILY "SockFamily" -#define LAUNCH_JOBSOCKETKEY_PROTOCOL "SockProtocol" -#define LAUNCH_JOBSOCKETKEY_MULTICASTGROUP "MulticastGroup" - typedef struct _launch_data *launch_data_t; typedef enum { Modified: trunk/launchd/src/libvproc.c =================================================================== --- trunk/launchd/src/libvproc.c 2008-09-03 00:07:58 UTC (rev 23711) +++ trunk/launchd/src/libvproc.c 2008-09-17 18:41:18 UTC (rev 23712) @@ -41,6 +41,7 @@ #include "liblaunch_public.h" #include "liblaunch_private.h" #include "liblaunch_internal.h" +#include "launchd_ktrace.h" #include "protocol_vproc.h" @@ -83,6 +84,19 @@ vproc_shmem = (struct vproc_shmem_s *)vm_addr; } +static void +vproc_client_init(void) +{ + char *val = getenv(LAUNCHD_DO_APPLE_INTERNAL_LOGGING); + if( val ) { + if( strncmp(val, "true", sizeof("true") - 1) == 0 ) { + do_apple_internal_logging = true; + } + } + + vproc_shmem_init(); +} + vproc_transaction_t vproc_transaction_begin(vproc_t vp __attribute__((unused))) { @@ -97,7 +111,7 @@ _vproc_transaction_begin(void) { if (unlikely(vproc_shmem == NULL)) { - int po_r = pthread_once(&shmem_inited, vproc_shmem_init); + int po_r = pthread_once(&shmem_inited, vproc_client_init); if (po_r != 0 || vproc_shmem == NULL) { return; } @@ -117,6 +131,8 @@ abort(); } } while( !__sync_bool_compare_and_swap(&vproc_shmem->vp_shmem_transaction_cnt, old, old + 1) ); + + runtime_ktrace(RTKT_VPROC_TRANSACTION_INCREMENT, old + 1, 0, 0); } size_t @@ -172,6 +188,7 @@ newval = __sync_sub_and_fetch(&vproc_shmem->vp_shmem_transaction_cnt, 1); + runtime_ktrace(RTKT_VPROC_TRANSACTION_DECREMENT, newval, 0, 0); if (unlikely(newval < 0)) { if (vproc_shmem->vp_shmem_flags & VPROC_SHMEM_EXITING) { raise(SIGKILL); @@ -199,7 +216,7 @@ typeof(vproc_shmem->vp_shmem_standby_cnt) newval; if (unlikely(vproc_shmem == NULL)) { - int po_r = pthread_once(&shmem_inited, vproc_shmem_init); + int po_r = pthread_once(&shmem_inited, vproc_client_init); if (po_r != 0 || vproc_shmem == NULL) { return; } @@ -229,6 +246,11 @@ { typeof(vproc_shmem->vp_shmem_standby_cnt) newval; + if( unlikely(vproc_shmem == NULL) ) { + __crashreporter_info__ = "Process called vproc_standby_end() when not enrolled in transaction model."; + abort(); + } + newval = __sync_sub_and_fetch(&vproc_shmem->vp_shmem_standby_cnt, 1); if (unlikely(newval < 0)) { @@ -648,7 +670,7 @@ case VPROC_GSK_TRANSACTIONS_ENABLED: /* Shared memory region is required for transactions. */ if( unlikely(vproc_shmem == NULL) ) { - int po_r = pthread_once(&shmem_inited, vproc_shmem_init); + int po_r = pthread_once(&shmem_inited, vproc_client_init); if( po_r != 0 || vproc_shmem == NULL ) { if( outval ) { *outval = -1; Modified: trunk/launchd/src/libvproc_private.h =================================================================== --- trunk/launchd/src/libvproc_private.h 2008-09-03 00:07:58 UTC (rev 23711) +++ trunk/launchd/src/libvproc_private.h 2008-09-17 18:41:18 UTC (rev 23712) @@ -20,6 +20,7 @@ * @APPLE_APACHE_LICENSE_HEADER_END@ */ +#include <Availability.h> #include <sys/types.h> #include <sys/cdefs.h> #include <sys/syslog.h> @@ -27,6 +28,8 @@ #include <stdbool.h> #include <launch.h> +#define VPROC_HAS_TRANSACTIONS 1 + __BEGIN_DECLS #pragma GCC visibility push(default) @@ -73,24 +76,23 @@ void _vproc_logv(int pri, int err, const char *msg, va_list ap) __attribute__((format(printf, 3, 0))); #define VPROCMGR_SESSION_LOGINWINDOW "LoginWindow" -#define VPROCMGR_SESSION_BACKGROUND "Background" -#define VPROCMGR_SESSION_AQUA "Aqua" -#define VPROCMGR_SESSION_STANDARDIO "StandardIO" -#define VPROCMGR_SESSION_SYSTEM "System" +#define VPROCMGR_SESSION_BACKGROUND "Background" +#define VPROCMGR_SESSION_AQUA "Aqua" +#define VPROCMGR_SESSION_STANDARDIO "StandardIO" +#define VPROCMGR_SESSION_SYSTEM "System" vproc_err_t _vprocmgr_move_subset_to_user(uid_t target_user, const char *session_type); -void _vproc_standby_begin(void); -void _vproc_standby_end(void); -size_t _vproc_standby_count(void); -size_t _vproc_standby_timeout(void); +void _vproc_standby_begin(void) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA); +void _vproc_standby_end(void) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA); +size_t _vproc_standby_count(void) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA); +size_t _vproc_standby_timeout(void) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA); -void _vproc_transaction_try_exit(int status); -void _vproc_transaction_begin(void); -void _vproc_transaction_end(void); -size_t _vproc_transaction_count(void); +void _vproc_transaction_try_exit(int status) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA); +void _vproc_transaction_begin(void) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA); +void _vproc_transaction_end(void) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA); +size_t _vproc_transaction_count(void) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA); - #pragma GCC visibility pop __END_DECLS
participants (1)
-
source_changes@macosforge.org