Ignore:
Timestamp:
Dec 8, 2009, 12:25:10 PM (15 years ago)
Author:
[email protected]
Message:

Add asserts to RefCounted to make sure ref/deref happens on the right thread.
https://bugs.webkit.org/show_bug.cgi?id=31639

Reviewed by Darin Adler.

JavaScriptCore:

  • runtime/Structure.cpp:

(JSC::Structure::Structure): Disable thread verification on this class since it uses addressOfCount().

  • wtf/RefCounted.h:

(WTF::RefCountedBase::ref): Add ASSERT.
(WTF::RefCountedBase::hasOneRef): Ditto.
(WTF::RefCountedBase::refCount): Ditto.
(WTF::RefCountedBase::derefBase): Ditto.
(WTF::RefCountedBase::disableThreadVerification): delegate to ThreadVerifier method.

  • wtf/ThreadVerifier.h: Added.

(WTF::ThreadVerifier::ThreadVerifier): New Debug-only class to verify that ref/deref of RefCounted is done on the same thread.
(WTF::ThreadVerifier::activate): Activates checks. Called when ref count becomes above 2.
(WTF::ThreadVerifier::deactivate): Deactivates checks. Called when ref count drops below 2.
(WTF::ThreadVerifier::disableThreadVerification): used on objects that should not be checked (StringImpl etc)
(WTF::ThreadVerifier::verifyThread):

JavaScriptGlue:

  • ForwardingHeaders/wtf/ThreadVerifier.h: Added.

WebCore:

  • loader/icon/IconRecord.cpp:

(WebCore::IconRecord::IconRecord): Disable thread verification for this class because of its cross-thread use in IconDatabase.

  • platform/SharedBuffer.cpp:

(WebCore::SharedBuffer::SharedBuffer): Ditto.

  • platform/text/StringImpl.cpp:

(WebCore::StringImpl::StringImpl): Disable thread verification for this class, add FIXME to enforce proper usage via crossThreadString.

  • ForwardingHeaders/wtf/ThreadVerifier.h: Added.

WebKit/mac:

  • ForwardingHeaders/wtf/ThreadVerifier.h: Added.

WebKitTools:

  • DumpRenderTree/ForwardingHeaders/wtf/ThreadVerifier.h: Added.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj

    r51624 r51869  
    176176                180B9B080F16D94F009BDBC5 /* CurrentTime.h in Headers */ = {isa = PBXBuildFile; fileRef = 180B9AF00F16C569009BDBC5 /* CurrentTime.h */; settings = {ATTRIBUTES = (Private, ); }; };
    177177                180B9BFE0F16E94D009BDBC5 /* CurrentTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 180B9AEF0F16C569009BDBC5 /* CurrentTime.cpp */; };
     178                18470E8310CD8CBB005426C9 /* ThreadVerifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 18470E7310CD8AB6005426C9 /* ThreadVerifier.h */; settings = {ATTRIBUTES = (Private, ); }; };
    178179                1C61516C0EBAC7A00031376F /* ProfilerServer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1C61516A0EBAC7A00031376F /* ProfilerServer.mm */; settings = {COMPILER_FLAGS = "-fno-strict-aliasing"; }; };
    179180                1C61516D0EBAC7A00031376F /* ProfilerServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C61516B0EBAC7A00031376F /* ProfilerServer.h */; };
     
    645646                180B9AEF0F16C569009BDBC5 /* CurrentTime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CurrentTime.cpp; sourceTree = "<group>"; };
    646647                180B9AF00F16C569009BDBC5 /* CurrentTime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CurrentTime.h; sourceTree = "<group>"; };
     648                18470E7310CD8AB6005426C9 /* ThreadVerifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThreadVerifier.h; sourceTree = "<group>"; };
    647649                1C61516A0EBAC7A00031376F /* ProfilerServer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ProfilerServer.mm; path = profiler/ProfilerServer.mm; sourceTree = "<group>"; };
    648650                1C61516B0EBAC7A00031376F /* ProfilerServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProfilerServer.h; path = profiler/ProfilerServer.h; sourceTree = "<group>"; };
     
    13581360                                E1EE793C0D6C9B9200FEA3BA /* ThreadingPthreads.cpp */,
    13591361                                E1B7C8BD0DA3A3360074B0DC /* ThreadSpecific.h */,
     1362                                18470E7310CD8AB6005426C9 /* ThreadVerifier.h */,
    13601363                                0B330C260F38C62300692DE3 /* TypeTraits.cpp */,
    13611364                                0B4D7E620F319AC800AD7E58 /* TypeTraits.h */,
     
    19841987                                BC18C4700E16F5CD00B34460 /* Threading.h in Headers */,
    19851988                                BC18C4710E16F5CD00B34460 /* ThreadSpecific.h in Headers */,
     1989                                18470E8310CD8CBB005426C9 /* ThreadVerifier.h in Headers */,
    19861990                                14A42E400F4F60EE00599099 /* TimeoutChecker.h in Headers */,
    19871991                                5D53726F0E1C54880021E549 /* Tracing.h in Headers */,
Note: See TracChangeset for help on using the changeset viewer.