From owner-freebsd-current@FreeBSD.ORG Mon Jul 11 14:45:46 2011 Return-Path: Delivered-To: current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1EA5310656AC for ; Mon, 11 Jul 2011 14:45:46 +0000 (UTC) (envelope-from Petr.Salinger@seznam.cz) Received: from relay.felk.cvut.cz (relay.felk.cvut.cz [147.32.80.7]) by mx1.freebsd.org (Postfix) with ESMTP id 9A51A8FC16 for ; Mon, 11 Jul 2011 14:45:45 +0000 (UTC) Received: from sci.felk.cvut.cz (sci.felk.cvut.cz [147.32.83.100]) by relay.felk.cvut.cz (8.14.4/8.14.4) with ESMTP id p6BEEc9F073451; Mon, 11 Jul 2011 16:14:38 +0200 (CEST) (envelope-from Petr.Salinger@seznam.cz) Date: Mon, 11 Jul 2011 16:23:36 +0200 (CEST) From: Petr Salinger X-X-Sender: salinger@sci.felk.cvut.cz To: Kostik Belousov In-Reply-To: <20110711133342.GT43872@deviant.kiev.zoral.com.ua> Message-ID: References: <20110711123332.GS43872@deviant.kiev.zoral.com.ua> <20110711133342.GT43872@deviant.kiev.zoral.com.ua> User-Agent: Alpine 2.02 (LRH 1266 2009-07-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; format=flowed; charset=US-ASCII X-FELK-MailScanner-Information: X-MailScanner-ID: p6BEEc9F073451 X-FELK-MailScanner: Found to be clean X-FELK-MailScanner-SpamCheck: not spam, SpamAssassin (not cached, score=-1.119, required 6, AWL 0.00, BAYES_00 -1.90, FREEMAIL_FROM 0.00, SPF_NEUTRAL 0.78) X-FELK-MailScanner-From: petr.salinger@seznam.cz X-FELK-MailScanner-To: current@freebsd.org, freebsd-hackers@freebsd.org, kostikbel@gmail.com, rmh@debian.org X-FELK-MailScanner-Watermark: 1310998479.6933@rQF0UD8XI1GYzmeowRQmjg X-Spam-Status: No X-Mailman-Approved-At: Mon, 11 Jul 2011 15:32:53 +0000 Cc: freebsd-hackers@freebsd.org, Robert Millan , current@freebsd.org Subject: Re: [PATCH] Improve LinuxThreads compatibility in rfork() X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Jul 2011 14:45:46 -0000 >>> Can you, please, describe the reasoning behind the >>>> + if (sig == SIGCHLD) sig = 0; >>> line ? >> >> The main reason is backward compatibility. >> The original FreeBSD code allows only to select between >> SIGUSR1 or SIGCHLD signals. >> >> The our extension changes meaning of RFLINUXTHPN to select signal based on >> bits 24-30 of passed flags instead of using SIGUSR1 every time. >> >> When the passed "signal" number is zero, it should behave identically >> on plain FreeBSD and in our environment, therefore SIGUSR1 is selected. >> The assumption is (have been) that (yet) undefined bits are zero. >> That way we are backward compatible with original FreeBSD. >> >> We still need an alternative way to select "none signal is sent" >> after child exit (under linux #0 is used). >> >> The SIGCHLD can be "selected" (also on original FreeBSD) by not specifying >> RFLINUXTHPN, therefore combination of RFLINUXTHPN and passed "signal" >> number SIGCHLD is (have been) used for "none signal". >> >> BTW, the opposite side is in >> >> http://anonscm.debian.org/viewvc/glibc-bsd/trunk/glibc-ports/kfreebsd/clone.c?view=markup > > I shall state that the sig == SIGCHLD case is ugly. Having the separate > flag "do not send signal to the parent" would be much less clumsy. > What are the requirements for the ABI stability for Debian/kFreeBSD ? > Can this be fixed now, or is it too late ? It should be backward compatible with one previous version. What about in long term this: RFLINUXTHPN bit will be renamed and will have meaning "select signal based on bits 24-30 of passed flags" - zero would mean "no signal" - SIGCHLD would mean undefined - SIGUSR1 would mean SIGUSR1 It is ABI/API breakage under original FreeBSD. The question is how frequently RFLINUXTHPN is used under native FreeBSD and its port collection. And under "Debian GNU/kFreeBSD COMPAT" or 8-COMPAT - SIGCHLD would mean "no signal" We do not use SIGUSR1 currently, the eglibc side can detect whether it runs under new-enough kernel and decide whether use 0 or SIGCHLD for "no signal". The kernel side would be something like: if (flags & RFLINUXTHPN) { p2->p_sigparent = RFTHPNSIGNUM(flags); #if COMPAT8 if (p2->p_sigparent == SIGCHLD) p2->p_sigparent = 0; #endif } Petr