GNU bug report logs - #14986
Latest Emacs trunk crashes when changing Ispell dictionary

Previous Next

Package: emacs;

Reported by: "Sebastien Vauban" <sva-news <at> mygooglest.com>

Date: Tue, 30 Jul 2013 15:05:02 UTC

Severity: normal

Done: Paul Eggert <eggert <at> cs.ucla.edu>

Bug is archived. No further changes may be made.

Full log


Message #14 received at 14986 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Sebastien Vauban <sva-news <at> mygooglest.com>,
 Paul Eggert <eggert <at> cs.ucla.edu>
Cc: 14986 <at> debbugs.gnu.org
Subject: Re: bug#14986: Latest Emacs trunk crashes when changing Ispell
 dictionary
Date: Tue, 30 Jul 2013 23:01:28 +0300
> From: "Sebastien Vauban" <sva-news <at> mygooglest.com>
> Cc: 14986 <at> debbugs.gnu.org
> Date: Tue, 30 Jul 2013 21:46:55 +0200
> 
> #1  0x011ea214 in emacs_abort () at c:/msys/home/dani/emacs/trunk/src/w32fns.c:8030
> #2  0x010db2e8 in terminate_due_to_signal (sig=22, backtrace_limit=2147483647) at c:/msys/home/dani/emacs/trunk/src/emacs.c:369
> #3  0x011503d5 in die (msg=0x147f8a2 <baud_convert+482> "errno != EBADF || fd < 0", file=0x147f708 <baud_convert+72> "c:/msys/home/dani/emacs/trunk/src/sysdep.c",
>     line=2272) at c:/msys/home/dani/emacs/trunk/src/alloc.c:6558
> #4  0x010ff747 in emacs_close (fd=2147483647) at c:/msys/home/dani/emacs/trunk/src/sysdep.c:2272
> #5  0x011c0654 in create_temp_file (nargs=12, args=0x88e264) at c:/msys/home/dani/emacs/trunk/src/callproc.c:1027
> #6  0x011c0965 in Fcall_process_region (nargs=12, args=0x88e264) at c:/msys/home/dani/emacs/trunk/src/callproc.c:1118

Thanks.

Paul, I'm afraid that the assumption in create_temp_file, viz.:

      errno = EEXIST;
      mktemp (tempfile);
      /* INT_MAX denotes success, because close (INT_MAX) does nothing.  */
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      fd = *tempfile ? INT_MAX : -1;

and this code in emacs_close:

  int
  emacs_close (int fd)
  {
    while (1)
      {
	int r = posix_close (fd, POSIX_CLOSE_RESTART);
	if (r == 0)
	  return r;
	if (!POSIX_CLOSE_RESTART || errno != EINTR)
	  {
	    eassert (errno != EBADF || fd < 0);
	    return errno == EINPROGRESS ? 0 : r;
	  }
      }

will not work on Windows, because closing a file descriptor of INT_MAX
will most certainly produce EBADF on Windows.

Why is this trickery needed for platforms that use mktemp?




This bug report was last modified 12 years and 17 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.