[launchd-changes] [23408] trunk/launchd/src
source_changes at macosforge.org
source_changes at macosforge.org
Tue Sep 18 18:00:28 PDT 2007
Revision: 23408
http://trac.macosforge.org/projects/launchd/changeset/23408
Author: zarzycki at apple.com
Date: 2007-09-18 18:00:28 -0700 (Tue, 18 Sep 2007)
Log Message:
-----------
We need to wrap kill()/killpg() to get ESRCH returned instead of EPERM.
EPERM is still returned when appropriate.
Modified Paths:
--------------
trunk/launchd/src/Makefile.am
trunk/launchd/src/Makefile.in
trunk/launchd/src/launchd.c
trunk/launchd/src/launchd_core_logic.c
trunk/launchd/src/launchd_runtime.h
Added Paths:
-----------
trunk/launchd/src/launchd_runtime_kill.c
trunk/launchd/src/launchd_runtime_kill.h
Modified: trunk/launchd/src/Makefile.am
===================================================================
--- trunk/launchd/src/Makefile.am 2007-09-18 19:59:38 UTC (rev 23407)
+++ trunk/launchd/src/Makefile.am 2007-09-19 01:00:28 UTC (rev 23408)
@@ -48,7 +48,7 @@
launchd_CFLAGS = -mdynamic-no-pic $(AM_CFLAGS) -Wno-unused-parameter
launchd_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_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
launchd_runtime.c:: notifyServer.h launchd_internal.h
launchd_core_logic.c:: protocol_vproc.h job_reply.h protocol_vprocServer.h
Modified: trunk/launchd/src/Makefile.in
===================================================================
--- trunk/launchd/src/Makefile.in 2007-09-18 19:59:38 UTC (rev 23407)
+++ trunk/launchd/src/Makefile.in 2007-09-19 01:00:28 UTC (rev 23408)
@@ -96,7 +96,7 @@
am__launchd_SOURCES_DIST = 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
+ job_replyUser.c launchd_runtime.c launchd_runtime_kill.c
@LIBS_ONLY_FALSE at am_launchd_OBJECTS = launchd-launchd.$(OBJEXT) \
@LIBS_ONLY_FALSE@ launchd-launchd_core_logic.$(OBJEXT) \
@LIBS_ONLY_FALSE@ launchd-launchd_unix_ipc.$(OBJEXT) \
@@ -105,7 +105,8 @@
@LIBS_ONLY_FALSE@ launchd-launchd_internalUser.$(OBJEXT) \
@LIBS_ONLY_FALSE@ launchd-launchd_internalServer.$(OBJEXT) \
@LIBS_ONLY_FALSE@ launchd-job_replyUser.$(OBJEXT) \
- at LIBS_ONLY_FALSE@ launchd-launchd_runtime.$(OBJEXT)
+ at LIBS_ONLY_FALSE@ launchd-launchd_runtime.$(OBJEXT) \
+ at LIBS_ONLY_FALSE@ launchd-launchd_runtime_kill.$(OBJEXT)
launchd_OBJECTS = $(am_launchd_OBJECTS)
launchd_LDADD = $(LDADD)
launchd_LINK = $(CCLD) $(launchd_CFLAGS) $(CFLAGS) $(launchd_LDFLAGS) \
@@ -252,7 +253,7 @@
@LIBS_ONLY_FALSE at SystemStarter_SOURCES = StartupItems.c IPC.c SystemStarter.c
@LIBS_ONLY_FALSE at launchd_CFLAGS = -mdynamic-no-pic $(AM_CFLAGS) -Wno-unused-parameter
@LIBS_ONLY_FALSE at launchd_LDFLAGS = -lbsm
- at 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
+ at 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
@LIBS_ONLY_FALSE at launchproxy_LDFLAGS = -weak_framework Security
@LIBS_ONLY_FALSE at man1_MANS = wait4path.1 launchctl.1
@LIBS_ONLY_FALSE at man5_MANS = launchd.plist.5 launchd.conf.5
@@ -420,6 +421,7 @@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/launchd-launchd_internalServer.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/launchd-launchd_internalUser.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/launchd-launchd_runtime.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/launchd-launchd_runtime_kill.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/launchd-launchd_unix_ipc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/launchd-notifyServer.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/launchd-protocol_vprocServer.Po at am__quote@
@@ -771,6 +773,20 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='launchd_runtime.c' object='launchd-launchd_runtime.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_runtime.obj `if test -f 'launchd_runtime.c'; then $(CYGPATH_W) 'launchd_runtime.c'; else $(CYGPATH_W) '$(srcdir)/launchd_runtime.c'; fi`
+
+launchd-launchd_runtime_kill.o: launchd_runtime_kill.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(launchd_CFLAGS) $(CFLAGS) -MT launchd-launchd_runtime_kill.o -MD -MP -MF $(DEPDIR)/launchd-launchd_runtime_kill.Tpo -c -o launchd-launchd_runtime_kill.o `test -f 'launchd_runtime_kill.c' || echo '$(srcdir)/'`launchd_runtime_kill.c
+ at am__fastdepCC_TRUE@ mv -f $(DEPDIR)/launchd-launchd_runtime_kill.Tpo $(DEPDIR)/launchd-launchd_runtime_kill.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='launchd_runtime_kill.c' object='launchd-launchd_runtime_kill.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(launchd_CFLAGS) $(CFLAGS) -c -o launchd-launchd_runtime_kill.o `test -f 'launchd_runtime_kill.c' || echo '$(srcdir)/'`launchd_runtime_kill.c
+
+launchd-launchd_runtime_kill.obj: launchd_runtime_kill.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(launchd_CFLAGS) $(CFLAGS) -MT launchd-launchd_runtime_kill.obj -MD -MP -MF $(DEPDIR)/launchd-launchd_runtime_kill.Tpo -c -o launchd-launchd_runtime_kill.obj `if test -f 'launchd_runtime_kill.c'; then $(CYGPATH_W) 'launchd_runtime_kill.c'; else $(CYGPATH_W) '$(srcdir)/launchd_runtime_kill.c'; fi`
+ at am__fastdepCC_TRUE@ mv -f $(DEPDIR)/launchd-launchd_runtime_kill.Tpo $(DEPDIR)/launchd-launchd_runtime_kill.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='launchd_runtime_kill.c' object='launchd-launchd_runtime_kill.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(launchd_CFLAGS) $(CFLAGS) -c -o launchd-launchd_runtime_kill.obj `if test -f 'launchd_runtime_kill.c'; then $(CYGPATH_W) 'launchd_runtime_kill.c'; else $(CYGPATH_W) '$(srcdir)/launchd_runtime_kill.c'; fi`
install-man1: $(man1_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
Modified: trunk/launchd/src/launchd.c
===================================================================
--- trunk/launchd/src/launchd.c 2007-09-18 19:59:38 UTC (rev 23407)
+++ trunk/launchd/src/launchd.c 2007-09-19 01:00:28 UTC (rev 23408)
@@ -277,7 +277,7 @@
sleep(3);
- kill(-1, SIGKILL);
+ runtime_kill(-1, SIGKILL);
}
void
Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c 2007-09-18 19:59:38 UTC (rev 23407)
+++ trunk/launchd/src/launchd_core_logic.c 2007-09-19 01:00:28 UTC (rev 23408)
@@ -525,7 +525,7 @@
return;
}
- job_assumes(j, kill(j->p, SIGTERM) != -1);
+ job_assumes(j, runtime_kill(j->p, SIGTERM) != -1);
j->sent_sigterm_time = mach_absolute_time();
if (j->exit_timeout) {
@@ -1971,14 +1971,9 @@
/*
* The job is dead. While the PID/PGID is still known to be
* valid, try to kill abandoned descendant processes.
- *
- * We'd use job_assumes(), but POSIX defines consistency over
- * correctness, and consequently kill/killpg now returns EPERM
- * instead of ESRCH. As luck would have it, ESRCH is the only
- * error we can ignore.
*/
if (!j->abandon_pg) {
- killpg(j->p, SIGKILL);
+ job_assumes(j, runtime_killpg(j->p, SIGKILL) != -1 || errno == ESRCH);
}
/*
@@ -2186,7 +2181,7 @@
return;
}
- job_assumes(j, kill(j->p, SIGKILL) != -1);
+ job_assumes(j, runtime_kill(j->p, SIGKILL) != -1);
j->sent_sigkill = true;
@@ -2690,7 +2685,7 @@
/* Temporarily disabled due to 5423935 and 4946119. */
#if 0
/* Ask the accountless process to exit. */
- job_assumes(j, kill(i_pid, SIGTERM) != -1);
+ job_assumes(j, runtime_kill(i_pid, SIGTERM) != -1);
#endif
}
@@ -4114,7 +4109,7 @@
/*
* The kernel team requested that launchd not do this for Leopard.
- * jobmgr_assumes(jm, kill(p_i, SIGKILL) != -1);
+ * jobmgr_assumes(jm, runtime_kill(p_i, SIGKILL) != -1);
*/
}
@@ -5026,7 +5021,7 @@
return 0;
}
} else if (otherj->p) {
- job_assumes(j, kill(otherj->p, sig) != -1);
+ job_assumes(j, runtime_kill(otherj->p, sig) != -1);
}
return 0;
Modified: trunk/launchd/src/launchd_runtime.h
===================================================================
--- trunk/launchd/src/launchd_runtime.h 2007-09-18 19:59:38 UTC (rev 23407)
+++ trunk/launchd/src/launchd_runtime.h 2007-09-19 01:00:28 UTC (rev 23408)
@@ -26,6 +26,8 @@
#include <stdbool.h>
#include <syslog.h>
+#include "launchd_runtime_kill.h"
+
struct ldcred {
uid_t euid;
uid_t uid;
Added: trunk/launchd/src/launchd_runtime_kill.c
===================================================================
--- trunk/launchd/src/launchd_runtime_kill.c (rev 0)
+++ trunk/launchd/src/launchd_runtime_kill.c 2007-09-19 01:00:28 UTC (rev 23408)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2007 Apple Inc. All rights reserved.
+ *
+ * @APPLE_APACHE_LICENSE_HEADER_START@
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @APPLE_APACHE_LICENSE_HEADER_END@
+ */
+
+#define _NONSTD_SOURCE 1
+#include <signal.h>
+
+#include "launchd_runtime_kill.h"
+
+/*
+ * POSIX defines consistency over correctness, and consequently kill/killpg now
+ * returns EPERM instead of ESRCH.
+ *
+ * I've filed 5487498 to get a non-portable kill() variant, but for now,
+ * defining _NONSTD_SOURCE gets us the old behavior.
+ */
+
+int
+runtime_kill(pid_t pid, int sig)
+{
+ return kill(pid, sig);
+}
+
+int
+runtime_killpg(pid_t pgrp, int sig)
+{
+ return killpg(pgrp, sig);
+}
Added: trunk/launchd/src/launchd_runtime_kill.h
===================================================================
--- trunk/launchd/src/launchd_runtime_kill.h (rev 0)
+++ trunk/launchd/src/launchd_runtime_kill.h 2007-09-19 01:00:28 UTC (rev 23408)
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2007 Apple Inc. All rights reserved.
+ *
+ * @APPLE_APACHE_LICENSE_HEADER_START@
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @APPLE_APACHE_LICENSE_HEADER_END@
+ */
+#ifndef __LAUNCHD_RUNTIME_KILL_H__
+#define __LAUNCHD_RUNTIME_KILL_H__
+
+#include <sys/types.h>
+
+int runtime_kill(pid_t pid, int sig);
+int runtime_killpg(pid_t pgrp, int sig);
+
+#endif
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070918/74511c4b/attachment.html
More information about the launchd-changes
mailing list