From eace2c5bcc72a154cd54478cebecb76536fc637f Mon Sep 17 00:00:00 2001 From: usa Date: Wed, 15 Nov 2017 05:18:37 +0000 Subject: Cannot call rb_thread_call_without_gvl before running VM * dir.c (readdir_without_gvl): check the VM is already initialized before calling rb_thread_call_without_gvl(). [Bug #14108] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60772 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- dir.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/dir.c b/dir.c index 519a3fce0a..73ea36d083 100644 --- a/dir.c +++ b/dir.c @@ -743,7 +743,6 @@ to_be_skipped(const struct dirent *dp) return FALSE; } -#ifndef _WIN32 static void * nogvl_readdir(void *ptr) { @@ -755,11 +754,11 @@ nogvl_readdir(void *ptr) static struct dirent * readdir_without_gvl(struct dir_data *dirp) { - return rb_thread_call_without_gvl(nogvl_readdir, dirp, RUBY_UBF_IO, 0); + if (rb_cThread) /* VM is running */ + return rb_thread_call_without_gvl(nogvl_readdir, dirp, RUBY_UBF_IO, 0); + else + return READDIR(dirp->dir, dirp->enc); } -#else -#define readdir_without_gvl(dirp) READDIR((dirp)->dir, (dirp)->enc) -#endif /* * call-seq: -- cgit v1.2.3