From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Spencer Baugh Newsgroups: gmane.emacs.bugs Subject: bug#63865: 29.0.90; call-process while owning the X selection hangs other processes Date: Sat, 03 Jun 2023 10:12:41 -0400 Message-ID: References: <83edmt9j8i.fsf@gnu.org> <87bkhxnhpk.fsf@yahoo.com> <87wn0kn3zu.fsf@yahoo.com> <83mt1g9044.fsf@gnu.org> <83leh08xmn.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="4673"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Cc: luangruo@yahoo.com, 63865@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sat Jun 03 16:13:21 2023 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q5S0O-00014G-Ss for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 03 Jun 2023 16:13:20 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q5S09-0005K8-3n; Sat, 03 Jun 2023 10:13:05 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q5S06-0005Js-U7 for bug-gnu-emacs@gnu.org; Sat, 03 Jun 2023 10:13:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q5S06-0007PG-LC for bug-gnu-emacs@gnu.org; Sat, 03 Jun 2023 10:13:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1q5S06-0004I7-GO for bug-gnu-emacs@gnu.org; Sat, 03 Jun 2023 10:13:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Spencer Baugh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 03 Jun 2023 14:13:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 63865 X-GNU-PR-Package: emacs Original-Received: via spool by 63865-submit@debbugs.gnu.org id=B63865.168580157216480 (code B ref 63865); Sat, 03 Jun 2023 14:13:02 +0000 Original-Received: (at 63865) by debbugs.gnu.org; 3 Jun 2023 14:12:52 +0000 Original-Received: from localhost ([127.0.0.1]:44063 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q5Rzw-0004Hk-0f for submit@debbugs.gnu.org; Sat, 03 Jun 2023 10:12:52 -0400 Original-Received: from mxout5.mail.janestreet.com ([64.215.233.18]:41901) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q5Rzq-0004HT-UA for 63865@debbugs.gnu.org; Sat, 03 Jun 2023 10:12:50 -0400 In-Reply-To: <83leh08xmn.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 03 Jun 2023 16:48:48 +0300") X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list 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-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:262850 Archived-At: Eli Zaretskii writes: >> From: Spencer Baugh >> Cc: luangruo@yahoo.com, 63865@debbugs.gnu.org >> Date: Sat, 03 Jun 2023 09:10:02 -0400 >> >> Eli Zaretskii writes: >> >> If I'm implementing some package and I decide to use call-process for >> >> some long operation, then some user uses my package and it runs >> >> call-process, and they get bored while waiting and switch away from >> >> Emacs, they'll experience a hang in some other application. That hang >> >> seems clearly undesirable! >> > >> > Then don't design the package such that call-process blocks Emacs for >> > prolonged periods of time. Because this will annoy the users of Emacs >> > even before it will be seen by other applications that request X >> > selections. >> >> Forget other packages: Emacs itself uses call-process in tons of places >> where it will run for prolonged periods of time! > > Really? "tons of places where it will run for prolonged periods of > time"? what is "prolonged period of time" for this purpose? Aren't > you a tad exaggerating? "prolonged period of time" is anything over a second. I see tons of calls to call-process with potentially long-running programs. "find", "gcc", "grep", "awk"... and depending on the user's system, *any* subprocess call can potentially run for a long time. But again, the point isn't just that they can potentially run for a long time. It's that *the user's whole system can be unusable* while they run. We are not just blocking Emacs, we are (sometimes) blocking *everything*. >> Should we port all these instances away from using call-process to avoid >> this behavior? > > There's no general answer to that, we should examine each case > separately. A general answer could be fixing call-process to not hang other processes. >> > call-process has its use cases, which are important, and we will not >> > deprecate it. >> > >> > You can easily emulate call-process with start-process if you need to >> > do so, so Emacs gives you both possibilities (and expects you to use >> > whatever is right in each case). >> >> What use case does call-process have on Unix, which an emulation in >> terms of start-process would not also satisfy? > > When the process returns quickly. call-process is significantly > simpler to use than start-process+wait, so doing that when unnecessary > is a complication we shouldn't take. What I mean was an emulation like this: (defun my-call-process (program &optional destination &rest args) (let ((process (make-process :name "call-process" :buffer destination :command (cons program args)))) (while (accept-process-output process)))) my-call-process is missing a few arguments that the real call-process has. But if this is all I use, is there *any* reason to *not* use my-call-process on Linux? There is at least one strong reason to use it: It won't hang other processes. > Anyway, this kind of discussion doesn't belong in a bug report about X > selections. But the entire point of this discussion, for me, is to fix the X-selection-related hangs which Emacs currently causes when in call-process. i.e., this bug report.