]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix recently-introduced file descriptor leak
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 19 Aug 2017 06:52:19 +0000 (23:52 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 19 Aug 2017 06:52:52 +0000 (23:52 -0700)
* src/fileio.c (Fmake_temp_file_internal):
Don’t leak a file descriptor if write_region signals an error.

src/fileio.c

index 6b3bdf2154d97564e212618e0de557791049fb1b..f954ac12b5d918a2ef2341c759dbc68cf02701ab 100644 (file)
@@ -693,10 +693,14 @@ This function does not grok magic file names.  */)
   bool failed = fd < 0;
   if (!failed)
     {
+      ptrdiff_t count = SPECPDL_INDEX ();
+      record_unwind_protect_int (close_file_unwind, fd);
       val = DECODE_FILE (val);
       if (STRINGP (text) && SBYTES (text) != 0)
        write_region (text, Qnil, val, Qnil, Qnil, Qnil, Qnil, fd);
       failed = NILP (dir_flag) && emacs_close (fd) != 0;
+      /* Discard the unwind protect.  */
+      specpdl_ptr = specpdl + count;
     }
   if (failed)
     {