Date: Wed, 24 Aug 2005 17:56:27 GMT From: soc-tyler <soc-tyler@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 82503 for review Message-ID: <200508241756.j7OHuRDR062726@repoman.freebsd.org>
index | next in thread | raw e-mail
http://perforce.freebsd.org/chv.cgi?CH=82503 Change 82503 by soc-tyler@soc-tyler_launchd on 2005/08/24 17:56:11 Remove a lot of the stupid fprintf() debugging statements now that things "sort of just work(tm)" Add in pseudo-fix for ADC bug # 4229893 (liblaunch's auto-start being completely brain-dead ;)) by adding some error checking. Also remove that BSDL nonsense, since the APSL trumps it, and makes me a saaaaad panda. (wtf was I thinking O_o) Beginning work on loading jobs into launchd via launchctl(1) Affected files ... .. //depot/projects/soc2005/launchd/NOTES#6 edit .. //depot/projects/soc2005/launchd/includes/launch.h#11 edit .. //depot/projects/soc2005/launchd/includes/launchd.h#8 edit .. //depot/projects/soc2005/launchd/launchd.c#14 edit .. //depot/projects/soc2005/launchd/liblaunch.c#12 edit Differences ... ==== //depot/projects/soc2005/launchd/NOTES#6 (text+ko) ==== @@ -9,14 +9,6 @@ There are no plans to incorporate this aspect of launchd(8) into FreeBSD until Zeroconf is stable, and in the base system of FreeBSD (6.xx, 7.xx, X.xx ;)) - - o launch_msg() doesn't need to be reimplemented until launchctl(1) is revamped - to work fully on FreeBSD (well, except for the controlling of launchd(8) part) - - After launchctl(1) is modified correctly, removal of CoreFoundation and - Zeroconf calls from launchd(8) can be made, and finally liblaunch can be - fixed to accomodate. - o The stock source comes with a modified init.c from Mac OS 10.3 and previously which was derived from the standard BSD init.c some eternity ago. ==== //depot/projects/soc2005/launchd/includes/launch.h#11 (text+ko) ==== @@ -3,26 +3,6 @@ * * Copyright (c) 2005 R. Tyler Ballance <tyler@tamu.edu> All rights reserved. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE * - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. */ /* ==== //depot/projects/soc2005/launchd/includes/launchd.h#8 (text+ko) ==== @@ -3,26 +3,6 @@ * * Copyright (c) 2005 R. Tyler Ballance <tyler@tamu.edu> All rights reserved. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE * - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. */ /* ==== //depot/projects/soc2005/launchd/launchd.c#14 (text+ko) ==== @@ -3,26 +3,6 @@ * * Copyright (c) 2005 R. Tyler Ballance <tyler@tamu.edu> All rights reserved. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE * - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. */ /* ==== //depot/projects/soc2005/launchd/liblaunch.c#12 (text+ko) ==== @@ -3,26 +3,6 @@ * * Copyright (c) 2005 R. Tyler Ballance <tyler@tamu.edu> All rights reserved. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE * - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. */ /* @@ -53,6 +33,7 @@ #include <sys/fcntl.h> #include <sys/un.h> #include <sys/uio.h> +#include <sys/wait.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -122,21 +103,13 @@ char *where = getenv(LAUNCHD_SOCKET_ENV); char *_launchd_fd = getenv(LAUNCHD_TRUSTED_FD_ENV); int r, dfd, lfd = -1, tries; + pid_t _launchd_pid; -#ifdef _LAUNCHD_ - fprintf(stderr,"starting launch_client_init() in liblaunch.c:%d\n", __LINE__); - fprintf(stderr,"where = \"%s\"\n", where); - fprintf(stderr,"_launchd_fd = \"%s\"\n", _launchd_fd); -#endif - _lc = calloc(1, sizeof(struct _launch_client)); // if we can't calloc() _lc, exit function if (_lc == NULL) - return; -#ifdef _LAUNCHD_ - fprintf(stderr,"calling pthread_mutex_init() in liblaunch.c:%d\n", __LINE__); -#endif + pthread_mutex_init(&_lc->mtx, NULL); if (_launchd_fd != NULL) { @@ -150,11 +123,6 @@ unsetenv(LAUNCHD_TRUSTED_FD_ENV); } -#ifdef _LAUNCHD_ - fprintf(stderr,"Reached liblaunch.c:%d and continuing with execution from here\n", - __LINE__); -#endif - if (lfd == -1) { memset(&sun, 0, sizeof(sun)); sun.sun_family = AF_UNIX; @@ -164,71 +132,57 @@ else snprintf(sun.sun_path, sizeof(sun.sun_path), "%s/%u/sock", LAUNCHD_SOCK_PREFIX, getuid()); -#ifdef _LAUNCHD_ - fprintf(stderr,"Successfully gotten the socket's path in liblaunch.c:%d\n", - __LINE__); -#endif - - if ((lfd = _fd(socket(AF_UNIX, SOCK_STREAM, 0))) == -1) { -#ifdef _LAUNCHD_ - fprintf(stderr,"_fd() call didn't succeed in liblaunch.c:%d\n", - __LINE__); -#endif + if ((lfd = _fd(socket(AF_UNIX, SOCK_STREAM, 0))) == -1) goto out_bad; - } for (tries = 0; tries < 10; tries++) { r = connect(lfd, (struct sockaddr *)&sun, sizeof(sun)); if (r == -1) { - if (fork() == 0) - execl(LAUNCHD_PATH, LAUNCHD_PATH, NULL); + _launchd_pid = fork(); + + if (_launchd_pid == 0) { + // start launchd(8) as a daemon + if (execl(LAUNCHD_PATH, LAUNCHD_PATH, "-d", NULL) != 0) { + fprintf(stderr,"execl() returned %s in %s:%d", + strerror(errno), __FILE__, __LINE__); + exit(EXIT_FAILURE); + } + } + + else if (_launchd_pid > 0) + waitpid(_launchd_pid, NULL, 0); + + /* in the case of fork() returning -1 + * we are simply going to loop through and try again + */ + sleep(1); - } else { - break; - } - } + } else + break; // socket connection succeeded, continue. + } // end socket connect loop if (r == -1) { close(lfd); -#ifdef _LAUNCHD_ - fprintf(stderr,"r was equal to -1 in liblaunch.c:%d\n", __LINE__); -#endif goto out_bad; } } - if (!(_lc->l = launchd_fdopen(lfd))) { + if ((_lc->l = launchd_fdopen(lfd)) == NULL) { close(lfd); -#ifdef _LAUNCHD_ - fprintf(stderr,"launchd_fdopen() failed in liblaunch.c:%d\n", __LINE__); -#endif goto out_bad; } - if (!(_lc->async_resp = launch_data_alloc(LAUNCH_DATA_ARRAY))) { -#ifdef _LAUNCHD_ - fprintf(stderr,"launch_data_alloc() failed in liblaunch.c:%d\n", __LINE__); -#endif + if ((_lc->async_resp = launch_data_alloc(LAUNCH_DATA_ARRAY)) == NULL) goto out_bad; - } return; out_bad: -#ifdef _LAUNCHD_ - fprintf(stderr,"Executed a \"goto out_bad\", running out_bad in liblaunch.c:%d\n", - __LINE__); -#endif if (_lc->l != NULL) launchd_close(_lc->l); if (_lc != NULL) free(_lc); _lc = NULL; -#ifdef _LAUNCHD_ - fprintf(stderr, - "Finished executing \'out_bad\', setting _lc to NULL in liblaunch.c:%d\n", - __LINE__); -#endif } launch_data_t launch_data_alloc(launch_data_type_t t) { @@ -277,11 +231,7 @@ free(d); } -size_t launch_data_dict_get_count(launch_data_t dict) -{ - return dict->_array_cnt / 2; -} - +size_t launch_data_dict_get_count(launch_data_t dict) { return dict->_array_cnt / 2; } bool launch_data_dict_insert(launch_data_t dict, launch_data_t what, const char *key) { @@ -742,25 +692,13 @@ { launch_data_t resp = NULL; -#ifdef _LAUNCHD_ - fprintf(stderr,"Starting launch_msg() in liblaunch.c:%d\n", __LINE__); -#endif - - // XXX: this call doesn't put something at &_lc pthread_once(&_lc_once, launch_client_init); - // XXX: we keep evaluating for true here, and error out if (_lc == NULL) { -#ifdef _LAUNCHD_ - fprintf(stderr,"_lc sucks, returning liblaunch.c:%d\n", __LINE__); -#endif errno = ENOTCONN; return NULL; } -#ifdef _LAUNCHD_ - fprintf(stderr,"Executing pthread_mutex_lock() in liblaunch.c:%d\n", __LINE__); -#endif pthread_mutex_lock(&_lc->mtx); if (d && launchd_msg_send(_lc->l, d) == -1) {home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200508241756.j7OHuRDR062726>
