diff --git a/ChangeLog b/ChangeLog index aeb0e9bbc7..17c90e3daf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Tue Jun 26 16:57:14 2012 Koichi Sasada + + * thread_pthread.c (register_cached_thread_and_wait): + return immediately if malloc() failed. + [ruby-core:43960] [ruby-trunk - Bug #6235] + + * thread_pthread.c (USE_THREAD_CACHE): check already defined or not. + Tue Jun 26 10:01:56 2012 Nobuyoshi Nakada * io.c (rb_io_s_popen): revert r36213 "popen: shell commands with diff --git a/thread_pthread.c b/thread_pthread.c index 06769bd293..9075314135 100644 --- a/thread_pthread.c +++ b/thread_pthread.c @@ -480,7 +480,9 @@ native_thread_destroy(rb_thread_t *th) #endif } +#ifndef USE_THREAD_CACHE #define USE_THREAD_CACHE 0 +#endif #if USE_THREAD_CACHE static rb_thread_t *register_cached_thread_and_wait(void); @@ -717,11 +719,15 @@ register_cached_thread_and_wait(void) { rb_thread_cond_t cond = { PTHREAD_COND_INITIALIZER, }; volatile rb_thread_t *th_area = 0; + struct timeval tv; + struct timespec ts; struct cached_thread_entry *entry = (struct cached_thread_entry *)malloc(sizeof(struct cached_thread_entry)); - struct timeval tv; - struct timespec ts; + if (entry == 0) { + return 0; /* failed -> terminate thread immediately */ + } + gettimeofday(&tv, 0); ts.tv_sec = tv.tv_sec + 60; ts.tv_nsec = tv.tv_usec * 1000;