From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Eric Abrahamsen Newsgroups: gmane.emacs.devel Subject: Re: make-thread with lambda form instead of function symbol Date: Mon, 17 Apr 2017 09:54:10 -0700 Message-ID: <878tmzynyl.fsf@ericabrahamsen.net> References: <87efws9w3c.fsf@ericabrahamsen.net> <87bmrvu9am.fsf@ericabrahamsen.net> <87tw5n7l4g.fsf@ericabrahamsen.net> <83shl7ectl.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: blaine.gmane.org 1492448088 7662 195.159.176.226 (17 Apr 2017 16:54:48 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Mon, 17 Apr 2017 16:54:48 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.0.50 (gnu/linux) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Apr 17 18:54:44 2017 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d09vH-0001sL-O2 for ged-emacs-devel@m.gmane.org; Mon, 17 Apr 2017 18:54:43 +0200 Original-Received: from localhost ([::1]:37838 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d09vN-0002Rg-JG for ged-emacs-devel@m.gmane.org; Mon, 17 Apr 2017 12:54:49 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:59415) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d09vH-0002RY-Kv for emacs-devel@gnu.org; Mon, 17 Apr 2017 12:54:44 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d09vD-0001OG-OK for emacs-devel@gnu.org; Mon, 17 Apr 2017 12:54:43 -0400 Original-Received: from [195.159.176.226] (port=53762 helo=blaine.gmane.org) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1d09vD-0001Nw-HT for emacs-devel@gnu.org; Mon, 17 Apr 2017 12:54:39 -0400 Original-Received: from list by blaine.gmane.org with local (Exim 4.84_2) (envelope-from ) id 1d09v3-0001cH-DW for emacs-devel@gnu.org; Mon, 17 Apr 2017 18:54:29 +0200 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 74 Original-X-Complaints-To: usenet@blaine.gmane.org Cancel-Lock: sha1:C+lbqSTaEh7u+98QzsiUiKB7AVg= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 195.159.176.226 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 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" Xref: news.gmane.org gmane.emacs.devel:214078 Archived-At: Eli Zaretskii writes: >> From: Eric Abrahamsen >> Date: Sun, 16 Apr 2017 20:45:19 -0700 >> >> >> (defun nnir-run-query (specs) >> >> (let* ((results []) >> >> (threads >> >> (mapcar >> >> (lambda (x) >> >> (let* ((server (car x)) >> >> (search-engine (nnir-server-to-search-engine server))) >> >> (make-thread >> >> (lambda () >> >> (setq results >> >> (vconcat >> >> (nnir-run-search >> >> search-engine >> >> server >> >> (cdr (assq 'nnir-query-spec specs)) >> >> (cadr x)) >> >> results)))))) >> >> (cdr (assq 'nnir-group-spec specs))))) >> >> (mapc #'thread-join threads) >> >> results)) >> >> >> >> I'm testing with a single IMAP server query (ie, only one thread is >> >> being created). The nnir-run-search function for the IMAP backend ends >> >> up calling nnimap-send-command--> nnimap-wait-for-response--> >> >> nnheader-accept-process-output--> accept-process-output, so I'm >> >> expecting that's where the thread yields. > > In this chain of calls, where's the backend process started? > >> > error ("Attempt to accept output from process %s locked to thread %s", >> > SDATA (proc->name), SDATA (XTHREAD (proc->thread)->name)); >> > >> > I guess that indicates you might be doing something wrong (though >> > obviously Emacs shouldn't be crashing) >> >> So perhaps an existing process can't be "moved" to another thread? > > What does it mean "moved" in this context? How did you try to "move" > a process to another thread? > > The ELisp manual says: > > ... by default a process is locked to the thread > that created it. When a process is locked to a thread, output from the > process can only be accepted by that thread. > > If you want to be able to accept process output from a thread other > than the one which created it, you need to call set-process-thread. Okay that certainly explains it -- I hadn't found that part of the manual. The IMAP process in question was long-running, created well before this thread was, so I was doing exactly the wrong thing. (All I meant by "move" was starting the process in one thread, and accepting its output in another.) >> But the segfault here seems to be coming from a borked attempt to >> represent either the process or the thread as a string.... > > Yes. Should be fixed now. But my advice is to always give your > thread meaningful names, as doing so will help you with debugging > (unless you are very good in remembering the hex addresses of your > thread objects ;-). Segfault's gone, thank you. Now to figure out where to stick the call to `set-process-thread'. And thanks for the "thread apply all bt" trick, I'll remember that. Eric