mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	merge revision(s) 32749:
* vm.c (th_init): preallocate alternative stack. NoMemoryError is better than rb_bug, of course. Patch by Eric Wong. [ruby-core:38572][ruby-core:38594]. * signal.c (rb_register_sigaltstack): ditto. * vm_core.h: moved ALT_STACK_SIZE definition from signal.c. * vm.c (thread_free): use xfree() instead of free(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@32750 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									32cfc7cefd
								
							
						
					
					
						commit
						64270d3df2
					
				
					 4 changed files with 25 additions and 12 deletions
				
			
		
							
								
								
									
										11
									
								
								ChangeLog
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								ChangeLog
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,3 +1,14 @@
 | 
			
		|||
Sat Jul 30 10:58:10 2011  KOSAKI Motohiro  <kosaki.motohiro@gmail.com>
 | 
			
		||||
 | 
			
		||||
	* vm.c (th_init): preallocate alternative stack.
 | 
			
		||||
	  NoMemoryError is better than rb_bug, of course.
 | 
			
		||||
	  Patch by Eric Wong. [ruby-core:38572][ruby-core:38594].
 | 
			
		||||
 | 
			
		||||
	* signal.c (rb_register_sigaltstack): ditto.
 | 
			
		||||
 | 
			
		||||
	* vm_core.h: moved ALT_STACK_SIZE definition from signal.c.
 | 
			
		||||
	* vm.c (thread_free): use xfree() instead of free().
 | 
			
		||||
 | 
			
		||||
Sat Jul 30 07:20:49 2011  Tanaka Akira  <akr@fsij.org>
 | 
			
		||||
 | 
			
		||||
	* ext/socket/lib/socket.rb (udp_server_sockets): unused variable
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										15
									
								
								signal.c
									
										
									
									
									
								
							
							
						
						
									
										15
									
								
								signal.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -423,29 +423,22 @@ typedef RETSIGTYPE ruby_sigaction_t(int);
 | 
			
		|||
#ifdef POSIX_SIGNAL
 | 
			
		||||
 | 
			
		||||
#ifdef USE_SIGALTSTACK
 | 
			
		||||
#ifdef SIGSTKSZ
 | 
			
		||||
#define ALT_STACK_SIZE (SIGSTKSZ*2)
 | 
			
		||||
#else
 | 
			
		||||
#define ALT_STACK_SIZE (4*1024)
 | 
			
		||||
#endif
 | 
			
		||||
/* alternate stack for SIGSEGV */
 | 
			
		||||
void
 | 
			
		||||
rb_register_sigaltstack(rb_thread_t *th)
 | 
			
		||||
{
 | 
			
		||||
    stack_t newSS, oldSS;
 | 
			
		||||
 | 
			
		||||
    if (th->altstack) return;
 | 
			
		||||
    if (!th->altstack)
 | 
			
		||||
	rb_bug("rb_register_sigaltstack: th->altstack not initialized\n");
 | 
			
		||||
 | 
			
		||||
    newSS.ss_sp = th->altstack = malloc(ALT_STACK_SIZE);
 | 
			
		||||
    if (newSS.ss_sp == NULL)
 | 
			
		||||
	/* should handle error */
 | 
			
		||||
	rb_bug("rb_register_sigaltstack. malloc error\n");
 | 
			
		||||
    newSS.ss_sp = th->altstack;
 | 
			
		||||
    newSS.ss_size = ALT_STACK_SIZE;
 | 
			
		||||
    newSS.ss_flags = 0;
 | 
			
		||||
 | 
			
		||||
    sigaltstack(&newSS, &oldSS); /* ignore error. */
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
#endif /* USE_SIGALTSTACK */
 | 
			
		||||
 | 
			
		||||
static sighandler_t
 | 
			
		||||
ruby_signal(int signum, sighandler_t handler)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										5
									
								
								vm.c
									
										
									
									
									
								
							
							
						
						
									
										5
									
								
								vm.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1754,7 +1754,7 @@ thread_free(void *ptr)
 | 
			
		|||
	else {
 | 
			
		||||
#ifdef USE_SIGALTSTACK
 | 
			
		||||
	    if (th->altstack) {
 | 
			
		||||
		free(th->altstack);
 | 
			
		||||
		xfree(th->altstack);
 | 
			
		||||
	    }
 | 
			
		||||
#endif
 | 
			
		||||
	    ruby_xfree(ptr);
 | 
			
		||||
| 
						 | 
				
			
			@ -1826,6 +1826,9 @@ th_init(rb_thread_t *th, VALUE self)
 | 
			
		|||
    th->self = self;
 | 
			
		||||
 | 
			
		||||
    /* allocate thread stack */
 | 
			
		||||
#ifdef USE_SIGALTSTACK
 | 
			
		||||
    th->altstack = xmalloc(ALT_STACK_SIZE);
 | 
			
		||||
#endif
 | 
			
		||||
    th->stack_size = RUBY_VM_THREAD_STACK_SIZE;
 | 
			
		||||
    th->stack = thread_recycle_stack(th->stack_size);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -383,6 +383,12 @@ struct rb_unblock_callback {
 | 
			
		|||
 | 
			
		||||
struct rb_mutex_struct;
 | 
			
		||||
 | 
			
		||||
#ifdef SIGSTKSZ
 | 
			
		||||
#define ALT_STACK_SIZE (SIGSTKSZ*2)
 | 
			
		||||
#else
 | 
			
		||||
#define ALT_STACK_SIZE (4*1024)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef struct rb_thread_struct {
 | 
			
		||||
    VALUE self;
 | 
			
		||||
    rb_vm_t *vm;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue