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 22:57:05 +0300 Message-ID: <8336jb2fhq.fsf@gnu.org> References: <87muhks3b5.fsf@hochschule-trier.de> <83muhj2zmb.fsf@gnu.org> <83ims72xcj.fsf@gnu.org> <83a7dj2sz9.fsf@gnu.org> <835zo72jmr.fsf@gnu.org> <834l3r2jbe.fsf@gnu.org> Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="68656"; 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 21:58:07 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 1hm1gE-000Hj9-R3 for geb-bug-gnu-emacs@m.gmane.org; Fri, 12 Jul 2019 21:58:06 +0200 Original-Received: from localhost ([::1]:52094 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hm1gD-0007r5-TB for geb-bug-gnu-emacs@m.gmane.org; Fri, 12 Jul 2019 15:58:05 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:53317) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hm1gB-0007qt-Dt for bug-gnu-emacs@gnu.org; Fri, 12 Jul 2019 15:58:04 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hm1gA-0007MD-Dl for bug-gnu-emacs@gnu.org; Fri, 12 Jul 2019 15:58:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:60165) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hm1gA-0007LY-9C for bug-gnu-emacs@gnu.org; Fri, 12 Jul 2019 15:58:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1hm1g9-0003ZR-V9 for bug-gnu-emacs@gnu.org; Fri, 12 Jul 2019 15:58:02 -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 19:58: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.156296144513675 (code B ref 36609); Fri, 12 Jul 2019 19:58:01 +0000 Original-Received: (at 36609) by debbugs.gnu.org; 12 Jul 2019 19:57:25 +0000 Original-Received: from localhost ([127.0.0.1]:40753 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hm1fW-0003YR-6f for submit@debbugs.gnu.org; Fri, 12 Jul 2019 15:57:24 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:40790) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hm1fU-0003YF-Hf for 36609@debbugs.gnu.org; Fri, 12 Jul 2019 15:57:21 -0400 Original-Received: from fencepost.gnu.org ([2001:470:142:3::e]:46916) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hm1fO-0006LU-PJ; Fri, 12 Jul 2019 15:57:14 -0400 Original-Received: from [176.228.60.248] (port=4397 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1hm1fN-0005E9-BI; Fri, 12 Jul 2019 15:57:14 -0400 In-reply-to: (message from Pip Cet on Fri, 12 Jul 2019 19:24:38 +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:162804 Archived-At: > From: Pip Cet > Date: Fri, 12 Jul 2019 19:24:38 +0000 > Cc: 36609@debbugs.gnu.org, politza@hochschule-trier.de > > I'm now convinced that there simply is no safe way to call select() > from two threads at once when using glib. I hope not, although GTK with its idiosyncrasies caused a lot of pain for the threads implementation in Emacs. > I think our options are hacking around it and hoping nothing breaks > (this is what the attached patch does; it releases the main context > glib lock from the wrong thread soon "after" the other thread called > select, but there's actually no way to ensure that "after" is > accurate), or rewriting things so we have a single thread that does > all the select()ing. Hmm... how would this work with your patch? Suppose one thread calls xg_select, acquires the Glib lock, sets its holding_glib_lock flag, then releases the global Lisp lock and calls pselect. Since the global Lisp lock is now up for grabs, some other Lisp thread can acquire it and start running. If that other thread then calls xg_select, it will hang forever trying to acquire the Glib lock, because the first thread that holds it is stuck in pselect. Am I missing something? I know very little about GTK and the Glib context lock, but AFAIR we really must treat that lock as a global one, not a thread-local one. So I think it's okay for one thread to take the Glib lock, and another to release it, because Glib just wants to know whether the "rest of the program" has it, it doesn't care which thread is that which holds the lock.