[前][次][番号順一覧][スレッド一覧]

ruby-changes:4134

From: ko1@a...
Date: Thu, 28 Feb 2008 11:44:26 +0900 (JST)
Subject: [ruby-changes:4134] nobu - Ruby:r15624 (trunk): * file.c (rb_file_flock): immediately returns on EAGAIN if

nobu	2008-02-28 11:43:59 +0900 (Thu, 28 Feb 2008)

  New Revision: 15624

  Modified files:
    trunk/ChangeLog
    trunk/file.c

  Log:
    * file.c (rb_file_flock): immediately returns on EAGAIN if
      non-blocking.  [ruby-core:15672]


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/file.c?r1=15624&r2=15623&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15624&r2=15623&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 15623)
+++ ChangeLog	(revision 15624)
@@ -1,3 +1,8 @@
+Thu Feb 28 11:43:56 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* file.c (rb_file_flock): immediately returns on EAGAIN if
+	  non-blocking.  [ruby-core:15672]
+
 Thu Feb 28 11:23:50 2008  Nobuyoshi Nakada  <nobu@r...>
 
 	* io.c (rb_io_getline_1): get rid of segfault.  [ruby-dev:33938]
Index: file.c
===================================================================
--- file.c	(revision 15623)
+++ file.c	(revision 15624)
@@ -3256,10 +3256,10 @@
 {
 #ifndef __CHECKER__
     rb_io_t *fptr;
-    int op[2];
+    int op[2], op1;
 
     rb_secure(2);
-    op[1] = NUM2INT(operation);
+    op[1] = op1 = NUM2INT(operation);
     GetOpenFile(obj, fptr);
     op[0] = fptr->fd;
 
@@ -3273,6 +3273,7 @@
 #if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN
 	  case EWOULDBLOCK:
 #endif
+	    if (op1 & LOCK_NB) goto exit;
 	    rb_thread_polling();
 	    rb_io_check_closed(fptr);
 	    continue;
@@ -3287,6 +3288,7 @@
 	    rb_sys_fail(fptr->path);
 	}
     }
+  exit:
 #endif
     return INT2FIX(0);
 }

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]