Skip to content

Commit

Permalink
merge revision(s) 32749:
Browse files Browse the repository at this point in the history
	* 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
  • Loading branch information
kosaki committed Jul 30, 2011
1 parent 32cfc7c commit 64270d3
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 12 deletions.
11 changes: 11 additions & 0 deletions 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
Expand Down
15 changes: 4 additions & 11 deletions signal.c
Expand Up @@ -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)
Expand Down
5 changes: 4 additions & 1 deletion vm.c
Expand Up @@ -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);
Expand Down Expand Up @@ -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);

Expand Down
6 changes: 6 additions & 0 deletions vm_core.h
Expand Up @@ -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;
Expand Down

0 comments on commit 64270d3

Please sign in to comment.