Date: Sat, 19 Mar 2016 22:08:26 +0200 From: Konstantin Belousov <kostikbel@gmail.com> To: threads@freebsd.org Cc: jilles@freebsd.org Subject: Removing the pid 1 code Message-ID: <20160319200826.GF1741@kib.kiev.ua>
next in thread | raw e-mail | index | archive | help
We have very special code executed during the libthr initialisation, which attempts to set up session and controlling terminal when running as pid 1. I do not see why do we need this, e.g. why behaviour of a program must be different due to the presence of libthr and running as pid 1. The code is there from 1998' libc_r. Please either provide arguments why should we do that, or agree with the following change. I decided to pre-resolve getpid() just in case, as it is done by the current code, but even this is probably not neccessary. diff --git a/lib/libthr/thread/thr_init.c b/lib/libthr/thread/thr_init.c index 3c81299..f9f845b 100644 --- a/lib/libthr/thread/thr_init.c +++ b/lib/libthr/thread/thr_init.c @@ -305,7 +305,7 @@ _thread_init_hack(void) void _libpthread_init(struct pthread *curthread) { - int fd, first, dlopened; + int first, dlopened; /* Check if this function has already been called: */ if ((_thr_initial != NULL) && (curthread == NULL)) @@ -321,27 +321,6 @@ _libpthread_init(struct pthread *curthread) memcpy(__thr_jtable, jmp_table, sizeof(jmp_table)); __thr_interpose_libc(); - /* - * Check for the special case of this process running as - * or in place of init as pid = 1: - */ - if ((_thr_pid = getpid()) == 1) { - /* - * Setup a new session for this process which is - * assumed to be running as root. - */ - if (setsid() == -1) - PANIC("Can't set session ID"); - if (revoke(_PATH_CONSOLE) != 0) - PANIC("Can't revoke console"); - if ((fd = __sys_openat(AT_FDCWD, _PATH_CONSOLE, O_RDWR)) < 0) - PANIC("Can't open console"); - if (setlogin("root") == -1) - PANIC("Can't set login to root"); - if (_ioctl(fd, TIOCSCTTY, (char *) NULL) == -1) - PANIC("Can't set controlling terminal"); - } - /* Initialize pthread private data. */ init_private(); diff --git a/lib/libthr/thread/thr_rtld.c b/lib/libthr/thread/thr_rtld.c index cb20098..6c407d1 100644 --- a/lib/libthr/thread/thr_rtld.c +++ b/lib/libthr/thread/thr_rtld.c @@ -227,6 +227,7 @@ _thr_rtld_init(void) _rtld_atfork_post(NULL); _malloc_prefork(); _malloc_postfork(); + getpid(); syscall(SYS_getpid); /* mask signals, also force to resolve __sys_sigprocmask PLT */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20160319200826.GF1741>