From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.devel Subject: Re: the state of the concurrency branch Date: Wed, 28 Aug 2013 18:58:20 +0300 Message-ID: <8338ptg63n.fsf@gnu.org> References: <87vc2t7erx.fsf@fleche.redhat.com> <83txicffpe.fsf@gnu.org> Reply-To: Eli Zaretskii NNTP-Posting-Host: plane.gmane.org X-Trace: ger.gmane.org 1377705501 13402 80.91.229.3 (28 Aug 2013 15:58:21 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 28 Aug 2013 15:58:21 +0000 (UTC) Cc: lekktu@gmail.com, monnier@iro.umontreal.ca, emacs-devel@gnu.org To: tromey@redhat.com Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Aug 28 17:58:21 2013 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1VEi8Q-000140-SD for ged-emacs-devel@m.gmane.org; Wed, 28 Aug 2013 17:58:18 +0200 Original-Received: from localhost ([::1]:36984 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VEi8Q-0007h2-HP for ged-emacs-devel@m.gmane.org; Wed, 28 Aug 2013 11:58:18 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:48911) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VEi8J-0007gP-JA for emacs-devel@gnu.org; Wed, 28 Aug 2013 11:58:16 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VEi8E-0008La-Et for emacs-devel@gnu.org; Wed, 28 Aug 2013 11:58:11 -0400 Original-Received: from mtaout21.012.net.il ([80.179.55.169]:37198) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VEi8E-0008HN-7G for emacs-devel@gnu.org; Wed, 28 Aug 2013 11:58:06 -0400 Original-Received: from conversion-daemon.a-mtaout21.012.net.il by a-mtaout21.012.net.il (HyperSendmail v2007.08) id <0MS900I000CDHB00@a-mtaout21.012.net.il> for emacs-devel@gnu.org; Wed, 28 Aug 2013 18:58:04 +0300 (IDT) Original-Received: from HOME-C4E4A596F7 ([87.69.4.28]) by a-mtaout21.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0MS900I5Z0CRCS60@a-mtaout21.012.net.il>; Wed, 28 Aug 2013 18:58:04 +0300 (IDT) In-reply-to: <83txicffpe.fsf@gnu.org> X-012-Sender: halo1@inter.net.il X-detected-operating-system: by eggs.gnu.org: Solaris 10 X-Received-From: 80.179.55.169 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:163077 Archived-At: > Date: Mon, 26 Aug 2013 21:51:41 +0300 > From: Eli Zaretskii > Cc: tromey@redhat.com, monnier@iro.umontreal.ca, emacs-devel@gnu.org > > I fixed the compilation, but the stuff in process.c needs work: if you > invoke "M-x grep", Emacs aborts after Grep exits, here: > > void > delete_read_fd (int fd) > { > eassert (fd < MAXDESC); > eassert (fd <= max_desc); <<<<<<<<<<<<<<<<< > > because max_desc is zero. Here's some more info about this problem. The assertion is violated by the following series of calls: delete_read_fd (5); recompute_max_desc (); delete_read_fd (5); The old code was doing FD_CLR instead of delete_read_fd, so it was clearing twice the same bit, which doesn't hurt anything. The new code triggers the assertion, because clearing the flag bits in the first delete_read_fd call causes recompute_max_desc to set max_desc to zero, and the second call to delete_read_fd aborts. If I remove the offending assertion, as in the patch below, the problem goes away. Why do we need these assertions? === modified file 'src/process.c' --- src/process.c 2013-08-26 18:42:11 +0000 +++ src/process.c 2013-08-28 15:57:15 +0000 @@ -497,7 +497,6 @@ void delete_read_fd (int fd) { eassert (fd < MAXDESC); - eassert (fd <= max_desc); delete_keyboard_wait_descriptor (fd); if (fd_callback_info[fd].flags == 0) @@ -559,7 +558,6 @@ delete_write_fd (int fd) int lim = max_desc; eassert (fd < MAXDESC); - eassert (fd <= max_desc); #ifdef NON_BLOCKING_CONNECT if ((fd_callback_info[fd].flags & NON_BLOCKING_CONNECT_FD) != 0) @@ -6942,7 +6940,6 @@ delete_keyboard_wait_descriptor (int des int lim = max_desc; eassert (desc >= 0 && desc < MAXDESC); - eassert (desc <= max_desc); fd_callback_info[desc].flags &= ~(FOR_READ | KEYBOARD_FD | PROCESS_FD);