[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [h-e-w] Re: emacsclientw.exe bug: random exit status
From: |
Lennart Borgman |
Subject: |
Re: [h-e-w] Re: emacsclientw.exe bug: random exit status |
Date: |
Tue, 13 Oct 2009 01:28:29 +0200 |
Hm, you are right ... ;-)
Did you find out how to fix it?
On Tue, Oct 13, 2009 at 1:03 AM, Kai Tetzlaff <address@hidden> wrote:
> Gary Oberbrunner wrote:
>> emacsclientw exits with a random exit status when called from a win32 window
>> app (such as emacs itself). The reason is an uninitialized variable in
>> w32_teardown_window in w32emacsclient.h. I suspect if "ret" is initialized
>> to zero (exit status success) in this function it would just work. I don't
>> have mingw so I can't compile it here myself, sorry.
>>
>> This is on emacs 23.1.50, also happens on the latest CVS test version. I'm
>> using the EmacsW32 patched version on XP, but don't think that matters
>> either.
>>
>> The symptom is easy to reproduce. In a shell window inside emacs (I use
>> cygwin zsh, but any shell will work), run
>> emacsclient foo || echo BAD
>> then C-x # to close the server buffer, and then look back in the shell
>> window:
>> % emacsclientw foo || echo BAD
>> Waiting for Emacs...
>> BAD
>> %
>>
>> (I'm sure you already know that "emacsclient", the non-windows version, is
>> totally broken, gives "Unknown&_command:&"... but emacsclientw is fine so it
>> doesn't really matter.)
>>
>> Here's the affected code:
>> ===========
>> int
>> w32_teardown_window (int connected)
>> {
>> int ret; <<<<<<<<<<====== FIX HERE to int ret=0;
>> if (w32_window_app ())
>> {
>> w32_check_not_synced();
>> w32_wait_threads_fin(connected);
>> ret = W32_SYNC_get_g_exit_value();
>> DeleteCriticalSection(&g_cs.cs);
>> return ret;
>> }
>> else
>> ret = g_exit_value;
>> return ret;
>> }
>> ============
>>
>>
>
> I've also been running into this. Now, when looking at the code of what
> i believe should be the patched version of emacsclient.c, the main
> function looks like this:
>
> int
> main (argc, argv)
> int argc;
> char **argv;
> {
> int i, rl, needlf = 0;
> char *cwd, *str;
> char string[BUFSIZ+1];
> int connected = 0;
>
> ...
>
> if ((emacs_socket = set_socket ( alternate_editor ||
> (start_timeout_int > 0) , &islocal)) == INVALID_SOCKET)
> {
> ...
> connected = 1;
> }
>
> ...
>
> int exitval = finish_messages (connected);
>
> if (connected)
> exit(exitval);
> else
> exit(EXIT_FAILURE);
> }
>
> I.e. if connected is not set to a non-zero value somewhere after it gets
> initialized, main will always exit with EXIT_FAILURE.
>
> The only place in main which sets connected is the if block included
> above. This block is only entered if set_socket returns INVALID_SOCKET
> which seems to be the case only if the server has not been started yet.
> So if you use emacsclient to send files to the server when it is already
> running, it will always seem to be failing.
>
> BR,
> Kai
>
>
>
>
- [h-e-w] Re: emacsclientw.exe bug: random exit status, Kai Tetzlaff, 2009/10/12
- Re: [h-e-w] Re: emacsclientw.exe bug: random exit status,
Lennart Borgman <=
- Re: [h-e-w] Re: emacsclientw.exe bug: random exit status, Kai Tetzlaff, 2009/10/14
- Re: [h-e-w] Re: emacsclientw.exe bug: random exit status, Lennart Borgman, 2009/10/12
- [h-e-w] Re: emacsclientw.exe bug: random exit status, Kai Tetzlaff, 2009/10/15
- [h-e-w] Re: emacsclientw.exe bug: random exit status, Lennart Borgman, 2009/10/15
- Re: [h-e-w] Re: emacsclientw.exe bug: random exit status, Jason Rumney, 2009/10/16
- [h-e-w] Re: emacsclientw.exe bug: random exit status, Kai Tetzlaff, 2009/10/23
- [h-e-w] Re: emacsclientw.exe bug: random exit status, Kai Tetzlaff, 2009/10/15
- [h-e-w] Re: emacsclientw.exe bug: random exit status, Kai Tetzlaff, 2009/10/16
- [h-e-w] Re: emacsclientw.exe bug: random exit status, Lennart Borgman, 2009/10/16
- [h-e-w] Re: emacsclientw.exe bug: random exit status, Kai Tetzlaff, 2009/10/23