Subject: Re: bug#33135: 27.0.50; (make-thread) TRAMP interactive freeze macOS 10.14

From: Alan Third <[email-masked]>
Date: Wed, 24 Oct 2018 11:53:44 +0100

On Wed, Oct 24, 2018 at 12:15:22PM +0200, Christian Johansson wrote:
> Hi!
> 
> I am able to reproduce this on two different computers using macOS 10.14 but
> I haven't tested this on any other system.
> 
> Steps to reproduce:
> 1. Open Emacs without any configuration: src/emacs -Q
> 2. Make sure you are in *scratch* buffer
> 3. Paste following Emacs Lisp code:
> 
> ;; FTP URL: ftp.dlptest.com or ftp://ftp.dlptest.com/
> ;; FTP User: [email-masked]
> ;; Password: e73jzTRTNqCN9PYAAjjn
> (make-thread (lambda()
>                (message "Listing directory files..")
>                (let ((files (directory-files
> "/ftp:[email-masked]@ftp.dlptest.com:/")))
>                  (message "Opened directory")
>                  (message "Directory files: %s" files))))
> 
> 4. Run M-x eval-buffer
> 5. Emacs asks for FTP password, paste in mini-buffer: e73jzTRTNqCN9PYAAjjn
> 6. Emacs now hangs, asks for password again and you can't stop it using C-g.
> You get error in terminal:

The NS port currently doesn’t handle interactive functions from
threads very well. I suspect the problem is being caused by displaying
a message from the background thread.

> Christians-Air:emacs christianjohansson$ src/emacs -Q
> 2018-10-24 12:07:58.383 emacs[627:14815] Failed to initialize color list
> unarchiver: Error Domain=NSCocoaErrorDomain Code=4864 "***
> -[NSKeyedUnarchiver _initForReadingFromData:error:throwLegacyExceptions:]:
> non-keyed archive cannot be decoded by NSKeyedUnarchiver"
> UserInfo={NSDebugDescription=*** -[NSKeyedUnarchiver
> _initForReadingFromData:error:throwLegacyExceptions:]: non-keyed archive
> cannot be decoded by NSKeyedUnarchiver}

This error will be fixed in Emacs 26.2.

> 2018-10-24 12:08:28.515 emacs[627:15311] WARNING: NSWindow drag regions
> should only be invalidated on the Main Thread! This will throw an exception
> in the future. Called from (
>     0   AppKit                              0x00007fff334132e3
> -[NSWindow(NSWindow_Theme)
> _postWindowNeedsToResetDragMarginsUnlessPostingDisabled] + 386
>     1   AppKit                              0x00007fff33435422
> -[NSThemeFrame _tileTitlebarAndRedisplay:] + 98
>     2   AppKit                              0x00007fff334604dd
> -[NSTitledFrame _titleDidChange] + 217
>     3   AppKit                              0x00007fff3345ff89
> -[NSTitledFrame setTitle:] + 730
>     4   AppKit                              0x00007fff3345fc00
> -[NSThemeFrame setTitle:] + 50
>     5   AppKit                              0x00007fff33423082 -[NSWindow
> _dosetTitle:andDefeatWrap:] + 211
>     6   emacs                               0x00000001001e7371
> ns_set_name_internal + 161
>     7   emacs                               0x000000010004f640
> x_consider_frame_title + 784
>     8   emacs                               0x0000000100028ad5
> redisplay_internal + 2949
<snip>
>     73  emacs                               0x00000001001b624a run_thread +
> 138
>     74  libsystem_pthread.dylib             0x00007fff6316d33d _pthread_body
> + 126
>     75  libsystem_pthread.dylib             0x00007fff631702a7
> _pthread_start + 70
>     76  libsystem_pthread.dylib             0x00007fff6316c425 thread_start
> + 13
> )

Yes, we can see redisplay is being called from within the thread, and
that just won’t work currently, I’m afraid.
-- 
Alan Third