From dbd90b2dff8a45969923073122dd54aede5a74ee Mon Sep 17 00:00:00 2001 From: k0kubun Date: Tue, 6 Nov 2018 08:01:28 +0000 Subject: mjit.c: don't use mutex before checking availability git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65572 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- mjit.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'mjit.c') diff --git a/mjit.c b/mjit.c index 4ff5ff9437..4f42575e0f 100644 --- a/mjit.c +++ b/mjit.c @@ -26,16 +26,18 @@ mjit_copy_job_handler(void *data) { struct mjit_copy_job *job = data; int finish_p; + if (stop_worker_p) { + /* `copy_cache_from_main_thread()` stops to wait for this job. Then job data which is + allocated by `alloca()` could be expired and we might not be able to access that. + Also this should be checked before CRITICAL_SECTION_START to ensure that mutex is alive. */ + return; + } + CRITICAL_SECTION_START(3, "in mjit_copy_job_handler"); finish_p = job->finish_p; CRITICAL_SECTION_FINISH(3, "in mjit_copy_job_handler"); - - if (stop_worker_p || finish_p) { - /* `stop_worker_p`: `copy_cache_from_main_thread()` stops to wait for this job. - Then job data which is allocated by `alloca()` could be expired and we might - not be able to access that. - `finish_p`: make sure that this job is never executed while job is being modified. */ - return; + if (finish_p) { + return; /* make sure that this job is never executed while job is being modified. */ } if (job->cc_entries) { -- cgit v1.2.3