From: yangguo@chromium.org Date: Wed, 5 Feb 2014 12:19:29 +0000 (+0000) Subject: Fix %OptimizeFunctionOnNextCall wrt concurrent compilation. X-Git-Tag: upstream/4.7.83~10869 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5fadbd9e2fd1f000b1355ef280bfd5a69c18923a;p=platform%2Fupstream%2Fv8.git Fix %OptimizeFunctionOnNextCall wrt concurrent compilation. If a function is marked or queued for concurrent compilation, %OptimizeFunctionOnNextCall becomes a no-op. That can be wrong if concurrent recompilation does not complete at the time we expect the function to have been optimized. R=hpayer@chromium.org Review URL: https://codereview.chromium.org/151343006 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@19100 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/runtime.cc b/src/runtime.cc index 333a2dc..372d74b 100644 --- a/src/runtime.cc +++ b/src/runtime.cc @@ -8503,7 +8503,12 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_OptimizeFunctionOnNextCall) { RUNTIME_ASSERT(args.length() == 1 || args.length() == 2); CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); - if (!function->IsOptimizable()) return isolate->heap()->undefined_value(); + if (!function->IsOptimizable() && + !function->IsMarkedForConcurrentOptimization() && + !function->IsInOptimizationQueue()) { + return isolate->heap()->undefined_value(); + } + function->MarkForOptimization(); Code* unoptimized = function->shared()->code();