From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.bugs Subject: bug#36609: 27.0.50; Possible race-condition in threading implementation Date: Fri, 12 Jul 2019 16:51:22 +0300 Message-ID: <83ftnb2wf9.fsf@gnu.org> References: <87muhks3b5.fsf@hochschule-trier.de> <83k1cn2z0l.fsf@gnu.org> Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="106128"; mail-complaints-to="usenet@blaine.gmane.org" Cc: 36609@debbugs.gnu.org, politza@hochschule-trier.de To: Pip Cet Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Fri Jul 12 15:56:05 2019 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1hlw1s-000RQV-KR for geb-bug-gnu-emacs@m.gmane.org; Fri, 12 Jul 2019 15:56:04 +0200 Original-Received: from localhost ([::1]:49632 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hlvy4-0002Li-Ky for geb-bug-gnu-emacs@m.gmane.org; Fri, 12 Jul 2019 09:52:08 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:60794) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hlvy1-0002LO-LT for bug-gnu-emacs@gnu.org; Fri, 12 Jul 2019 09:52:06 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hlvxy-0000m4-31 for bug-gnu-emacs@gnu.org; Fri, 12 Jul 2019 09:52:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:58813) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hlvxx-0000lo-VY for bug-gnu-emacs@gnu.org; Fri, 12 Jul 2019 09:52:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1hlvxx-0006em-R7 for bug-gnu-emacs@gnu.org; Fri, 12 Jul 2019 09:52:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 12 Jul 2019 13:52:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 36609 X-GNU-PR-Package: emacs Original-Received: via spool by 36609-submit@debbugs.gnu.org id=B36609.156293950425565 (code B ref 36609); Fri, 12 Jul 2019 13:52:01 +0000 Original-Received: (at 36609) by debbugs.gnu.org; 12 Jul 2019 13:51:44 +0000 Original-Received: from localhost ([127.0.0.1]:39401 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hlvxg-0006eG-A2 for submit@debbugs.gnu.org; Fri, 12 Jul 2019 09:51:44 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:48365) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hlvxd-0006e2-TO for 36609@debbugs.gnu.org; Fri, 12 Jul 2019 09:51:42 -0400 Original-Received: from fencepost.gnu.org ([2001:470:142:3::e]:40633) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hlvxY-0000L2-3u; Fri, 12 Jul 2019 09:51:36 -0400 Original-Received: from [176.228.60.248] (port=1816 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1hlvxW-00039q-Jh; Fri, 12 Jul 2019 09:51:35 -0400 In-reply-to: (message from Pip Cet on Fri, 12 Jul 2019 13:40:15 +0000) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:162766 Archived-At: > From: Pip Cet > Date: Fri, 12 Jul 2019 13:40:15 +0000 > Cc: politza@hochschule-trier.de, 36609@debbugs.gnu.org > > When a thread is signalled (by thread-signal, which sets another > thread's error_symbol) while the signalled thread is inside a > select(), thread_select() will return non-locally for that thread, and > we fail to release an internal GLib lock through > g_main_context_release(). That's the first bug. We should either release the global lock before the thread exits, or defer the acting upon the signal until later. We cannot disable the signal handling altogether because it is entirely legitimate to signal another thread, and when we do, that other thread will _always_ be inside thread_select. For the main thread, handling the signal in that situation shouldn't be a problem, because it is not going to exit. Right? > When xg_select() fails to acquire the internal GLib lock, it simply > does a select() on the remaining file descriptors: Why does it fail to acquire that lock? > context_acquired = g_main_context_acquire (context); > /* FIXME: If we couldn't acquire the context, we just silently proceed > because this function handles more than just glib file descriptors. > Note that, as implemented, this failure is completely silent: there is > no feedback to the caller. */ > > This seems like a second, albeit documented, bug to me. I think we're > risking not waking up from the actual select because another > (non-Emacs) thread happened to hold the main context at the time. So what is the proposal for that? spin waiting for the lock?