Fix mistake in previous commit: STD_FD_SYSTEM_CALL needs to record
authorTaylor R. Campbell <net/mumble/campbell>
Wed, 15 Apr 2009 13:09:20 +0000 (13:09 +0000)
committerTaylor R. Campbell <net/mumble/campbell>
Wed, 15 Apr 2009 13:09:20 +0000 (13:09 +0000)
that we are not out of files if the system call succeeds so that the
loop detection in UX_prim_check_fd_errno actually works.

v7/src/microcode/ux.c
v7/src/microcode/ux.h

index cda2d92665964087a677582bec0002382fd5c9c0..8bfc06455123c74976914ddd7c28d5e066cf2615 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: ux.c,v 1.37 2009/04/15 13:00:19 riastradh Exp $
+$Id: ux.c,v 1.38 2009/04/15 13:09:20 riastradh Exp $
 
 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
@@ -40,10 +40,11 @@ UX_prim_check_errno (enum syscall_names name)
   deliver_pending_interrupts ();
 }
 
+bool UX_out_of_files_p = false;
+
 void
 UX_prim_check_fd_errno (enum syscall_names name)
 {
-  static bool out_of_files_p = false;
   switch (errno)
     {
     case EINTR:
@@ -52,9 +53,9 @@ UX_prim_check_fd_errno (enum syscall_names name)
 
     case EMFILE:
     case ENFILE:
-      if (!out_of_files_p)
+      if (!UX_out_of_files_p)
         {
-          out_of_files_p = true;
+          UX_out_of_files_p = true;
           REQUEST_GC (0);
           deliver_pending_interrupts ();
         }
index afa32cb61faf2e4ab6b3eac8f80e454de2243cd7..62d3e20642565c04b04938f480041a6f5999d3d1 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: ux.h,v 1.91 2009/04/15 13:00:24 riastradh Exp $
+$Id: ux.h,v 1.92 2009/04/15 13:09:20 riastradh Exp $
 
 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
@@ -853,6 +853,7 @@ extern int UX_sigsuspend (const sigset_t *);
 \f
 extern void UX_prim_check_errno (enum syscall_names name);
 extern void UX_prim_check_fd_errno (enum syscall_names name);
+extern bool UX_out_of_files_p;
 
 #define STD_VOID_SYSTEM_CALL(name, expression) \
   do {                                         \
@@ -876,6 +877,7 @@ extern void UX_prim_check_fd_errno (enum syscall_names name);
   do {                                                 \
     while (((result) = (expression)) < 0)              \
       UX_prim_check_fd_errno (name);                   \
+    UX_out_of_files_p = false;                          \
   } while (0)
 
 #endif /* SCM_UX_H */