mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* include/ruby/intern.h, thread_pthread.c (rb_reserved_fd_p,
RB_RESERVED_FD_P): added. This C API is to limit to access fds which are used by RubyVM internal. In this version of CRuby, return 1 if fd is communication pipe. If your application needs to close all file descriptors to preent resource leak, skip internal fds using this C API. We also define a macro RB_RESERVED_FD_P(fd). So you can write #ifndef RB_RESERVED_FD_P #define RB_RESERVED_FD_P(fd) 0 #endif for Ruby 1.9.2 or previous version to write compatible extensions. See [ruby-core:37727] * thread_win32.c (rb_reserved_fd_p): added (return 0 for any fds). * io.c (rb_io_initialize): raise ArgumentError if given fd is reserved by Ruby. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32394 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									4937a6dec4
								
							
						
					
					
						commit
						eb35bb0b35
					
				
					 5 changed files with 41 additions and 0 deletions
				
			
		
							
								
								
									
										19
									
								
								ChangeLog
									
										
									
									
									
								
							
							
						
						
									
										19
									
								
								ChangeLog
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,3 +1,22 @@
 | 
			
		|||
Mon Jul  4 06:37:22 2011  Koichi Sasada  <ko1@atdot.net>
 | 
			
		||||
 | 
			
		||||
	* include/ruby/intern.h, thread_pthread.c (rb_reserved_fd_p,
 | 
			
		||||
	  RB_RESERVED_FD_P): added.  This C API is to limit to access
 | 
			
		||||
	  fds which are used by RubyVM internal.  In this version of
 | 
			
		||||
	  CRuby, return 1 if fd is communication pipe.
 | 
			
		||||
	  If your application needs to close all file descriptors to
 | 
			
		||||
	  preent resource leak, skip internal fds using this C API.
 | 
			
		||||
	  We also define a macro RB_RESERVED_FD_P(fd).  So you can write
 | 
			
		||||
	    #ifndef RB_RESERVED_FD_P
 | 
			
		||||
	    #define RB_RESERVED_FD_P(fd) 0
 | 
			
		||||
	    #endif
 | 
			
		||||
	  for Ruby 1.9.2 or previous version to write compatible extensions.
 | 
			
		||||
	  See [ruby-core:37727]
 | 
			
		||||
 | 
			
		||||
	* thread_win32.c (rb_reserved_fd_p): added (return 0 for any fds).
 | 
			
		||||
 | 
			
		||||
	* io.c (rb_io_initialize): raise ArgumentError if given fd is reserved by Ruby.
 | 
			
		||||
 | 
			
		||||
Sun Jul  3 23:43:56 2011  Yuki Sonoda (Yugui)  <yugui@yugui.jp>
 | 
			
		||||
 | 
			
		||||
	* ext/extmk.rb (extmake): suppresses outputs from extconf.rb.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -482,6 +482,8 @@ void rb_write_error(const char*);
 | 
			
		|||
void rb_write_error2(const char*, long);
 | 
			
		||||
void rb_close_before_exec(int lowfd, int maxhint, VALUE noclose_fds);
 | 
			
		||||
int rb_pipe(int *pipes);
 | 
			
		||||
int rb_reserved_fd_p(int fd);
 | 
			
		||||
#define RB_RESERVED_FD_P(fd) rb_reserved_fd_p(fd)
 | 
			
		||||
/* marshal.c */
 | 
			
		||||
VALUE rb_marshal_dump(VALUE, VALUE);
 | 
			
		||||
VALUE rb_marshal_load(VALUE);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										3
									
								
								io.c
									
										
									
									
									
								
							
							
						
						
									
										3
									
								
								io.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -6517,6 +6517,9 @@ rb_io_initialize(int argc, VALUE *argv, VALUE io)
 | 
			
		|||
    rb_io_extract_modeenc(&vmode, 0, opt, &oflags, &fmode, &convconfig);
 | 
			
		||||
 | 
			
		||||
    fd = NUM2INT(fnum);
 | 
			
		||||
    if (rb_reserved_fd_p(fd)) {
 | 
			
		||||
	rb_raise(rb_eArgError, "The given fd is not accessible because RubyVM reserves it");
 | 
			
		||||
    }
 | 
			
		||||
#if defined(HAVE_FCNTL) && defined(F_GETFL)
 | 
			
		||||
    oflags = fcntl(fd, F_GETFL);
 | 
			
		||||
    if (oflags == -1) rb_sys_fail(0);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1268,4 +1268,16 @@ ruby_stack_overflowed_p(const rb_thread_t *th, const void *addr)
 | 
			
		|||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
rb_reserved_fd_p(int fd)
 | 
			
		||||
{
 | 
			
		||||
    if (fd == timer_thread_pipe[0] ||
 | 
			
		||||
	fd == timer_thread_pipe[1]) {
 | 
			
		||||
	return 1;
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
	return 0;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* THREAD_SYSTEM_DEPENDENT_IMPLEMENTATION */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -779,4 +779,9 @@ ruby_alloca_chkstk(size_t len, void *sp)
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
int
 | 
			
		||||
rb_reserved_fd_p(int fd)
 | 
			
		||||
{
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
#endif /* THREAD_SYSTEM_DEPENDENT_IMPLEMENTATION */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue