Subject: bug#37480: 27.0.50; uncaught exception

From: Christian Johansson <[email-masked]>
Date: Mon, 23 Sep 2019 07:18:25 +0200

Hi

Alright, I didn't know about that function. Can you give an example of 
how to use it? It tried the following but it doesn't work, it seems the 
thread dies after the signal and I'm not sure were it exits.

(make-thread
  (lambda()
    (message "Start of asynchronous thread")
    (signal 'error '("Fatal error"))
    (message "End of asynchronous thread")
    (message "Last error %s" (thread-last-error))))

For my ssh-deploy plugin, sometimes a asynchronous process or thread 
gets an error, could be network issues for instance and I would like to 
be able to handle these cases. I'm trying to make sure there is only one 
asynchronous process or thread simultaneously related to a local file, 
this is to avoid race conditions that otherwise occur with my plugin, 
especially when on a bad connection.

I would be interested in exploring how to signal the main thread from 
the created thread, where can I read more about that?

Hälsningar / Best Regards
Christian

On 2019-09-22 17:39, Eli Zaretskii wrote:
>> Cc: [email-masked]
>> From: Christian Johansson <[email-masked]>
>> Date: Sun, 22 Sep 2019 17:26:28 +0200
>>
>> (condition-case
>>       nil
>>       (make-thread
>>        (lambda()
>>          (message "Start of asynchronous thread")
>>          (signal 'error '("Fatal error"))
>>          (message "End of asynchronous thread")))
>>     (message "Catched error"))
>>
>> I have a case were a error occurs inside a tramp thread and I would like
>> to be able to handle it
> You don't need condition-case in this case, you just need to examine
> the value of thread-last-error when the thread exits.
>
> Alternatively, you could try making the thread you start signal the
> main thread, then the main thread should be able to catch that error.
>
> In general, errors are thread-local, so you cannot catch an error
> signaled in another thread.