From 5cf6ffbc9b144daba0dd3d4b180e65ec7d0d1ae5 Mon Sep 17 00:00:00 2001 From: matz Date: Mon, 26 Mar 2001 08:57:16 +0000 Subject: * eval.c: remove TMP_PROTECT_END to prevent C_ALLOCA crash. * file.c (rb_file_flock): do not trap EINTR. * missing/flock.c (flock): returns the value from lockf(2) directly. * eval.c (ev_const_defined): should ignore toplevel cbase (Object). * eval.c (ev_const_get): ditto. * ext/md5/md5.h: replace by independent md5 implementation contributed by L. Peter Deutsch (thanks). * ext/md5/md5init.c: adopted to Deutsch's md5 implementation. * pack.c (pack_unpack): string from P/p should be tainted. * ext/curses/curses.c: curses on Mac OS X public beta does not have _maxx etc. * marshal.c (w_object): should truncate trailing zero short for bignums. * object.c (sym_intern): new method. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@1281 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- file.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'file.c') diff --git a/file.c b/file.c index 84d79a929..2881e6c7b 100644 --- a/file.c +++ b/file.c @@ -1584,7 +1584,7 @@ rb_file_truncate(obj, len) # define LOCK_UN 8 # endif -#if defined(EWOULDBLOCK) && 0 +#if 0 static int rb_thread_flock(fd, op, fptr) int fd, op; @@ -1596,11 +1596,14 @@ rb_thread_flock(fd, op, fptr) op |= LOCK_NB; while (flock(fd, op) < 0) { switch (errno) { - case EINTR: /* can be happen? */ + case EAGAIN: + case EACCES: +#if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN case EWOULDBLOCK: +#endif rb_thread_polling(); /* busy wait */ rb_io_check_closed(fptr); - break; + continue; default: return -1; } @@ -1629,11 +1632,14 @@ rb_file_flock(obj, operation) ret = flock(fileno(fptr->f), NUM2INT(operation)); TRAP_END; if (ret < 0) { -#ifdef EWOULDBLOCK - if (errno == EWOULDBLOCK) { - return Qfalse; - } + switch (errno) { + case EAGAIN: + case EACCES: +#if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN + case EWOULDBLOCK: #endif + return Qfalse; + } rb_sys_fail(fptr->path); } #endif -- cgit