diff options
author | kosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-09-09 17:11:03 +0000 |
---|---|---|
committer | kosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-09-09 17:11:03 +0000 |
commit | 4c10b36467ba7cbb59128dabd437ef3931c7d0e4 (patch) | |
tree | 5d736955dc24f40ecd97a03356c9538b02f9dbc8 /io.c | |
parent | 252334e016e97565e4d290719ff57c8043004fad (diff) | |
download | bundler-4c10b36467ba7cbb59128dabd437ef3931c7d0e4.tar.gz |
* io.c (rb_io_close): notify fd close before releasing gvl.
* io.c (fptr_finalize): modify fptr->mode before releasing gvl.
remove unnecessary rb_thread_fd_close().
[Feature #4570] [ruby-core:35711]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36942 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 10 |
1 files changed, 2 insertions, 8 deletions
@@ -3922,8 +3922,8 @@ fptr_finalize(rb_io_t *fptr, int noraise) fptr->fd = -1; fptr->stdio_file = 0; - if (!noraise) - rb_thread_fd_close(fd); + fptr->mode &= ~(FMODE_READABLE|FMODE_WRITABLE); + if (IS_PREP_STDIO(fptr) || fd <= 2) { /* need to keep FILE objects of stdin, stdout and stderr */ } @@ -3940,7 +3940,6 @@ fptr_finalize(rb_io_t *fptr, int noraise) if ((maygvl_close(fd, noraise) < 0) && NIL_P(err)) err = noraise ? Qtrue : INT2NUM(errno); } - fptr->mode &= ~(FMODE_READABLE|FMODE_WRITABLE); if (!NIL_P(err) && !noraise) { switch(TYPE(err)) { @@ -4052,13 +4051,8 @@ rb_io_close(VALUE io) if (fptr->fd < 0) return Qnil; fd = fptr->fd; -#if defined __APPLE__ && (!defined(MAC_OS_X_VERSION_MIN_ALLOWED) || MAC_OS_X_VERSION_MIN_ALLOWED <= 1050) - /* close(2) on a fd which is being read by another thread causes - * deadlock on Mac OS X 10.5 */ rb_thread_fd_close(fd); -#endif rb_io_fptr_cleanup(fptr, FALSE); - rb_thread_fd_close(fd); if (fptr->pid) { rb_last_status_clear(); |