-
ap@webkit.org authored
Fix a dtoa thread safety issue. WebCore can call kjs_strtod without holding JS lock, but we didn't have thread safety compiled in for dtoa. This is a 0.5% regression on SunSpider, which Sam Weinig has volunteered to cover with his recent improvement. * kjs/dtoa.cpp: (Bigint::Balloc): (Bigint::Bfree): Changed to use fastMalloc/fastDelete - they are much faster than the dtoa custom version was in the presence of locking (but somewhat slower in single-threaded case). (Bigint::pow5mult): Got rid of the dreaded double-checked locking anti-pattern (had to restructure the code to avoid significant performance implications). (Bigint::lshift): Rewrote to avoid an allocation, if possible. (Bigint::rv_alloc): (Bigint::kjs_freedtoa): (Bigint::kjs_dtoa): Check for USE(MULTIPLE_THREADS), not dtoa legacy MULTIPLE_THREADS. * kjs/InitializeThreading.cpp: Added. (KJS::initializeThreading): * kjs/InitializeThreading.h: Added. Initialize threading at KJS level, if enabled. * kjs/dtoa.h: Expose dtoa mutex for KJS::initializeThreading. * kjs/testkjs.cpp: (kjsmain): Call initializeThreading. * JavaScriptCore.exp: Export KJS::initializeThreading. * GNUmakefile.am: * JavaScriptCore.exp: * JavaScriptCore.pri: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: * JavaScriptCoreSources.bkl: * JavaScriptCore.xcodeproj/project.pbxproj: Added InitializeThreading.{h,cpp}. * wtf/Threading.h: Removed a using directive for WTF::initializeThreading - it is only to be called from KJS::initializeThreading, and having it in the global namespace is useless. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31404 268f45cc-cd09-0410-ab3c-d52691b4dbfc
8027278e