From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: michael.cadilhac@lrde.org (=?iso-8859-1?Q?Micha=EBl?= Cadilhac) Newsgroups: gmane.emacs.devel Subject: Re: delete-process bug Date: Sun, 28 May 2006 23:36:54 +0200 Organization: Epita/LRDE Message-ID: <87odxhq1ah.fsf@lrde.org> References: <87k69eyddj.fsf@lrde.org> <87fyj0r41g.fsf@lrde.org> <20060524112846.GA12046@agmartin.aq.upm.es> <87bqtmjrsh.fsf_-_@lrde.org> <87odxjakox.fsf@lrde.org> <8764jrlewm.fsf@lrde.org> <87pshyqgtd.fsf@lrde.org> <87fyiuq9t5.fsf@lrde.org> <877j45rj3w.fsf@lrde.org> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0779780582==" X-Trace: sea.gmane.org 1148852228 25602 80.91.229.2 (28 May 2006 21:37:08 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Sun, 28 May 2006 21:37:08 +0000 (UTC) Cc: Agustin Martin , Stefan Monnier , emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun May 28 23:37:03 2006 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1FkSwV-0001Kn-AG for ged-emacs-devel@m.gmane.org; Sun, 28 May 2006 23:37:00 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1FkSwU-0006bA-MC for ged-emacs-devel@m.gmane.org; Sun, 28 May 2006 17:36:58 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1FkSwG-0006ay-W6 for emacs-devel@gnu.org; Sun, 28 May 2006 17:36:45 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1FkSwF-0006aO-EL for emacs-devel@gnu.org; Sun, 28 May 2006 17:36:44 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1FkSwF-0006aL-AF for emacs-devel@gnu.org; Sun, 28 May 2006 17:36:43 -0400 Original-Received: from [62.39.139.2] (helo=kualalumpur.lrde.epita.fr) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA:32) (Exim 4.52) id 1FkT1f-0004Kh-F2 for emacs-devel@gnu.org; Sun, 28 May 2006 17:42:19 -0400 Original-Received: from mahaena.lrde.epita.fr ([192.168.101.66] helo=mahaena.lrde) by kualalumpur.lrde.epita.fr with esmtp (Exim 4.50) id 1FkSvo-0000Eh-4a; Sun, 28 May 2006 23:36:16 +0200 Original-To: storm@cua.dk (Kim F. Storm) Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAElBMVEVWPh+Tai+5r5YKBAEU CQQzGAtiq7gjAAACR0lEQVQ4jW2UzW7lIAyFzVW8BzTZX5DmCZLuU2H2pMXv/ypzbK7aSh2kRCRf /HNsE0q7Sg+RQ7JFKaqtrRNAl5AIIKe6D5DBqgbmUAe5hBI1wIRFAHjeM0RKtZi7XVVEpb0BSNfA IddChChT5DildSLWOWhY5IEItMnncZgFcUAc/5jjwCMsDosRNdfKPDTFEdVBW8C+RebDb4N5Orio RhM1+11IJyx0ng2+LryFHBMPDQDYHrY6IfGuU3ouiXTQNE8LIJDKOWpNxERTFrggQwRPd7USUsTW fJ0XbR3bdj5KgBYy4SACpxDeUYEUAzLmtJ1iIrD2gczPq8Qomjhsh/RjGIgKIO8p7NITjwlx7WID nsnQe5NeuTvoBpi8LX6vLLOh5icjOHqBypgnuSp7M+RE1agbQKHQr5E2z1WObhYW4gMqeGQL7joM jCf2DxSk5ApADSYHfFF4igNfJZL1z0GKP0FN02s4XiDXr7V5P94W6I9v8MfBOQDmfwAaVYt+x8Da v4DJvX8BAdin3Knm5yMZYAO4ABDkDniZLLfi4P40gP1F0TPGZOu0CGwA1lcowxwlGy6A9705mD0V jHCxwVZT/hYdRJVUGZNlx6l7ScQBTluof6Wj6bsPYlvpwoTvXFD9gHPn2TZPF3ntI2ecxVrW5MrV XiCie5EeNa7BlWu/HNSkprDUva163PHxAv5jyGV7gVzyAghSKOTnat85UIYFICXbD2NV9rRiv0BS tKQsg6OHH4A15F1WW+UHKHHa32h6aPnAm3/pUcWp+WYnTQAAAABJRU5ErkJggg== In-Reply-To: (Kim F. Storm's message of "Sun, 28 May 2006 23:15:58 +0200") User-Agent: Gnus/5.110006 (No Gnus v0.6) Emacs/22.0.50 (gnu/linux) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:55385 Archived-At: --===============0779780582== Content-Type: multipart/signed; boundary="==-=-="; micalg=pgp-sha1; protocol="application/pgp-signature" --==-=-= Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable storm@cua.dk (Kim F. Storm) writes: > michael.cadilhac@lrde.org (Micha=EBl Cadilhac) writes: > >> (Final ?) patch attached. > > Looks good to me! > > I wonder whether the pid should be added to deleted_pid_list if SIGCHLD is > not defined? In that case, it would be a memory leak... Oh, hmm... About memory leaks hrm... In fact, there is already a configuration that would lead to the non deletion of the PID from the list: =2D Call to delete_process, =2D Interrupted by a signal before inserting in deleted_processes_list , =2D Deletion from process_alist, =2D Then delete_process continues by... inserting the dead PID in the deleted_processes_list. I forgot to tell about it in my previous post. Sorry. Any idea for fixing this ? Putting the insertion in deleted_processes_list BEFORE the Kill would limit this leak, but not completely avoid it. > But I also wonder if any of the async process stuff actually works > without SIGCHLD ?!? Are there any systems which support async processes > but don't have SIGCHLD? Indeed, I don't know any system in which SIGCHLD is not defined and that can use sub processes (are we talking about a one-process system ?!). But it would be cleaner, indeed, to define the whole thing iff SIGCHLD is defined. I modified the patch for that (including in sigchld_handler and so because the list is not defined if SIGCHLD is not), and to make the insertion in deleted_processes_list before the kill. --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=process.patch Content-Transfer-Encoding: quoted-printable Index: src/process.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /sources/emacs/emacs/src/process.c,v retrieving revision 1.481 diff -c -r1.481 process.c *** src/process.c 8 May 2006 05:19:42 -0000 1.481 =2D-- src/process.c 28 May 2006 21:35:32 -0000 *************** *** 778,783 **** =2D-- 778,793 ---- return proc; } =20=20 +=20 + #ifdef SIGCHLD + /* Fdelete_process promises to immediately forget about the process, but = in + reality, Emacs needs to remember those processes until they have been + treated by sigchld_handler; otherwise this handler would consider the + process as being synchronous and say that the synchronous process is + dead. */ + static Lisp_Object deleted_pid_list; + #endif +=20 DEFUN ("delete-process", Fdelete_process, Sdelete_process, 1, 1, 0, doc: /* Delete PROCESS: kill it and forget about it immediately. PROCESS may be a process, a buffer, the name of a process or buffer, or *************** *** 799,804 **** =2D-- 809,820 ---- } else if (XINT (p->infd) >=3D 0) { + #ifdef SIGCHLD + /* No problem storing the pid here, as it is still in Vprocess_alis= t. */ + deleted_pid_list =3D Fcons (make_fixnum_or_float (p->pid), + /* GC treated elements set to nil. */ + Fdelq (Qnil, deleted_pid_list)); + #end Fkill_process (process, Qnil); /* Do this now, since remove_process will make sigchld_handler do n= othing. */ p->status *************** *** 6373,6378 **** =2D-- 6389,6405 ---- =20=20 /* Find the process that signaled us, and record its status. */ =20=20 + #ifdef SIGCHLD + /* The process can have been deleted by Fdelete_process. */ + tail =3D Fmember (make_fixnum_or_float (pid), deleted_pid_list); + if (!NILP (tail)) + { + Fsetcar (tail, Qnil); + goto sigchld_end_of_loop; + } + #endif +=20 + /* Otherwise, if it is asynchronous, it is in Vprocess_alist. */ p =3D 0; for (tail =3D Vprocess_alist; GC_CONSP (tail); tail =3D XCDR (tail)) { *************** *** 6424,6431 **** EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0); } =20=20 ! /* There was no asynchronous process found for that id. Check ! if we have a synchronous process. */ else { synch_process_alive =3D 0; =2D-- 6451,6458 ---- EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0); } =20=20 ! /* There was no asynchronous process found for that pid: we have ! a synchronous process. */ else { synch_process_alive =3D 0; *************** *** 6442,6447 **** =2D-- 6469,6478 ---- EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0); } =20=20 +=20 + sigchld_end_of_loop: + ; +=20 /* On some systems, we must return right away. If any more processes want to signal us, we will get another signal. *************** *** 6843,6848 **** =2D-- 6874,6882 ---- FD_SET (0, &input_wait_mask); =20=20 Vprocess_alist =3D Qnil; + #ifdef SIGCHLD + deleted_pid_list =3D Qnil; + #endif for (i =3D 0; i < MAXDESC; i++) { chan_process[i] =3D Qnil; *************** *** 6981,6986 **** =2D-- 7015,7023 ---- staticpro (&Qlast_nonmenu_event); =20=20 staticpro (&Vprocess_alist); + #ifdef SIGCHLD + staticpro (&deleted_pid_list); + #endif =20=20 DEFVAR_BOOL ("delete-exited-processes", &delete_exited_processes, doc: /* *Non-nil means delete processes immediately when they exi= t. --=-=-= Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable =2D-=20 | Micha=EBl `Micha' Cadilhac | Pour les 35-40 ans, l'humour = | | Epita/LRDE Promo 2007 | c'est une plus-value. = | | http://www.lrde.org/~cadilh_m | -- Guillaume L. = | `-- - JID: micha@amessage.be --' - -= -' --=-=-=-- --==-=-= Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2 (GNU/Linux) iD8DBQFEehf2ZYNf4qobZ7kRAj8TAKDhrSkRsIFIXyPgVvm0WAQFYfG9kACePqsw d793jezbTXqLShta9U+oR9A= =P/js -----END PGP SIGNATURE----- --==-=-=-- --===============0779780582== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-devel --===============0779780582==--