* thread.c, include/ruby/intern.h (rb_thread_interrupted): added.

* io.c: use VALUE of thead instead of rb_tread_t to check interrupts.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19477 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
ko1 2008-09-23 08:17:17 +00:00
Родитель 68a533c611
Коммит b9a12116fb
4 изменённых файлов: 20 добавлений и 5 удалений

Просмотреть файл

@ -1,3 +1,9 @@
Tue Sep 23 17:14:31 2008 Koichi Sasada <ko1@atdot.net>
* thread.c, include/ruby/intern.h (rb_thread_interrupted): added.
* io.c: use VALUE of thead instead of rb_tread_t to check interrupts.
Tue Sep 23 17:05:14 2008 Koichi Sasada <ko1@atdot.net>
* class.c, vm_core.h: move decl of rb_iseq_clone() to class.c.

Просмотреть файл

@ -659,6 +659,7 @@ VALUE rb_struct_define_without_accessor(const char *, VALUE, rb_alloc_func_t, ..
typedef void rb_unblock_function_t(void *);
typedef VALUE rb_blocking_function_t(void *);
void rb_thread_check_ints(void);
int rb_thread_interrupted(VALUE thval);
VALUE rb_thread_blocking_region(rb_blocking_function_t *func, void *data1,
rb_unblock_function_t *ubf, void *data2);
#define RUBY_UBF_IO ((rb_unblock_function_t *)-1)

9
io.c
Просмотреть файл

@ -13,7 +13,6 @@
#include "ruby/ruby.h"
#include "ruby/io.h"
#include "vm_core.h"
#include <ctype.h>
#include <errno.h>
@ -6979,7 +6978,7 @@ struct copy_stream_struct {
int error_no;
const char *notimp;
rb_fdset_t fds;
rb_thread_t *th;
VALUE th;
};
static int
@ -7107,7 +7106,7 @@ copy_stream_sendfile(struct copy_stream_struct *stp)
#endif
if (copy_stream_wait_write(stp) == -1)
return -1;
if (RUBY_VM_INTERRUPTED(stp->th))
if (rb_thread_interrupted(stp->th))
return -1;
goto retry_sendfile;
}
@ -7237,7 +7236,7 @@ copy_stream_read_write(struct copy_stream_struct *stp)
if (!use_eof)
copy_length -= ss;
if (RUBY_VM_INTERRUPTED(stp->th))
if (rb_thread_interrupted(stp->th))
return;
}
}
@ -7340,7 +7339,7 @@ copy_stream_body(VALUE arg)
rb_io_t *src_fptr = 0, *dst_fptr = 0;
int src_fd, dst_fd;
stp->th = GET_THREAD();
stp->th = rb_thread_current();
stp->total = 0;

Просмотреть файл

@ -899,6 +899,15 @@ rb_thread_check_trap_pending(void)
return GET_THREAD()->exec_signal != 0;
}
/* This function can be called in blocking region. */
int
rb_thread_interrupted(VALUE thval)
{
rb_thread_t *th;
GetThreadPtr(thval, th);
return RUBY_VM_INTERRUPTED(th);
}
struct timeval rb_time_timeval();
void