diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2013-07-11 19:03:47 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2013-07-11 19:03:47 -0700 |
commit | bacba3c26522ef297662bace31947d3e4f47c87a (patch) | |
tree | 7937ff9ad18bca16aff3ecf1f791632a8dec2ce3 /src/unexcoff.c | |
parent | 1048af7c8ff6e8a84f802fbe655b95c261a6afc0 (diff) | |
download | emacs-bacba3c26522ef297662bace31947d3e4f47c87a.tar.gz |
Fix races with threads and file descriptors.
* configure.ac (PTY_TTY_NAME_SPRINTF): Use emacs_close, not close.
* src/callproc.c (Fcall_process_region):
* src/dired.c (open_directory):
* src/emacs.c (main, Fdaemon_initialized):
* src/image.c (x_find_image_file):
* src/inotify.c (Finotify_rm_watch):
* src/lread.c (Flocate_file_internal):
* src/process.c (Fnetwork_interface_list, Fnetwork_interface_info):
* src/term.c (term_mouse_moveto, init_tty):
* src/termcap.c (tgetent):
* src/unexaix.c, src/unexcoff.c (report_error, report_error_1, adjust_lnnoptrs)
* src/unexaix.c, src/unexcoff.c, src/unexcw.c, src/unexelf.c (unexec):
* src/unexhp9k800.c, src/unexmacosx.c (unexec):
* src/callproc.c (Fcall_process_region):
Use emacs_close, not close.
* src/sysdep.c (POSIX_CLOSE_RESTART, posix_close) [!POSIX_CLOSE_RESTART]:
New macro and function, which emulates the POSIX_CLOSE_RESTART macro
and posix_close function on current platforms (which all lack them).
(emacs_close): Use it. This should fix the races on GNU/Linux and
on AIX and on future platforms that support POSIX_CLOSE_RESTART,
and it should avoid closing random victim file descriptors on
other platforms.
Diffstat (limited to 'src/unexcoff.c')
-rw-r--r-- | src/unexcoff.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/unexcoff.c b/src/unexcoff.c index e79821251ba..6b2a3336c8a 100644 --- a/src/unexcoff.c +++ b/src/unexcoff.c @@ -128,7 +128,7 @@ static void report_error (const char *file, int fd) { if (fd) - close (fd); + emacs_close (fd); report_file_error ("Cannot unexec", Fcons (build_string (file), Qnil)); } @@ -139,7 +139,7 @@ report_error (const char *file, int fd) static void report_error_1 (int fd, const char *msg, int a1, int a2) { - close (fd); + emacs_close (fd); error (msg, a1, a2); } @@ -511,7 +511,7 @@ adjust_lnnoptrs (int writedesc, int readdesc, const char *new_name) } } #ifndef MSDOS - close (new); + emacs_close (new); #endif return 0; } @@ -541,13 +541,13 @@ unexec (const char *new_name, const char *a_name) || adjust_lnnoptrs (new, a_out, new_name) < 0 ) { - close (new); + emacs_close (new); return; } - close (new); + emacs_close (new); if (a_out >= 0) - close (a_out); + emacs_close (a_out); mark_x (new_name); } |