[webkit-changes] [WebKit/WebKit] 2753fb: [JSC] Suppress Safer CPP Checking report for JSC::VM

Yusuke Suzuki noreply at github.com
Fri Dec 20 22:21:57 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 2753fb281412cc9fb004ec07c07c27c4f5c592d7
      https://github.com/WebKit/WebKit/commit/2753fb281412cc9fb004ec07c07c27c4f5c592d7
  Author: Yusuke Suzuki <ysuzuki at apple.com>
  Date:   2024-12-20 (Fri, 20 Dec 2024)

  Changed paths:
    M Source/JavaScriptCore/API/JSContextRef.cpp
    M Source/JavaScriptCore/jsc.cpp
    M Source/JavaScriptCore/runtime/VM.h
    M Source/WTF/WTF.xcodeproj/project.pbxproj
    M Source/WTF/wtf/CMakeLists.txt
    A Source/WTF/wtf/ThreadSafeRefCountedWithSuppressingSaferCPPChecking.h

  Log Message:
  -----------
  [JSC] Suppress Safer CPP Checking report for JSC::VM
https://bugs.webkit.org/show_bug.cgi?id=285050
rdar://141847850

Reviewed by Geoffrey Garen.

Safer CPP Checking cannot understand the lifetime modeling of JSC::VM:
JSC::VM is retained before entering JSC world, and inside JSC world, it
should be seen as always alive. Appropriate checking requires threading
lifetime information from the entrance of the JSC world, and it is not
done. As a result, the checker is reporting errors which is against how
JSC works.

This patch integrates a workaround class ThreadSafeRefCountedWithSuppressingSaferCPPChecking,
which uses refSuppressingSaferCPPChecking / derefSuppressingSaferCPPChecking instead of ref / deref,
so that it suppresses the checkers since checker uses ref / deref function names.
The implementation is copy of ThreadSafeRefCounted right now. But once
checker supports suppression mechanism, we will use it instead. Or once
checker understands how JSC::VM's lifetime management works, we do not
need suppression.

* Source/JavaScriptCore/API/JSContextRef.cpp:
(JSContextGroupRetain):
(JSContextGroupRelease):
(JSGlobalContextRetain):
(JSGlobalContextRelease):
* Source/JavaScriptCore/jsc.cpp:
(runJSC):
* Source/JavaScriptCore/runtime/VM.h:
(WTF::DefaultRefDerefTraits<JSC::VM>::refIfNotNull):
(WTF::DefaultRefDerefTraits<JSC::VM>::ref):
(WTF::DefaultRefDerefTraits<JSC::VM>::derefIfNotNull):
* Source/WTF/WTF.xcodeproj/project.pbxproj:
* Source/WTF/wtf/CMakeLists.txt:
* Source/WTF/wtf/ThreadSafeRefCountedWithSuppressingSaferCPPChecking.h: Added.
(WTF::ThreadSafeRefCountedWithSuppressingSaferCPPCheckingBase::refSuppressingSaferCPPChecking const):
(WTF::ThreadSafeRefCountedWithSuppressingSaferCPPCheckingBase::hasOneRef const):
(WTF::ThreadSafeRefCountedWithSuppressingSaferCPPCheckingBase::refCount const):
(WTF::ThreadSafeRefCountedWithSuppressingSaferCPPCheckingBase::derefBaseWithoutDeletionCheck const):
(WTF::ThreadSafeRefCountedWithSuppressingSaferCPPCheckingBase::derefBase const):
(WTF::ThreadSafeRefCountedWithSuppressingSaferCPPCheckingBase::applyRefDuringDestructionCheck const):
(WTF::ThreadSafeRefCountedWithSuppressingSaferCPPCheckingBase::~ThreadSafeRefCountedWithSuppressingSaferCPPCheckingBase):
(WTF::ThreadSafeRefCountedWithSuppressingSaferCPPChecking::derefSuppressingSaferCPPChecking const):

Canonical link: https://commits.webkit.org/288213@main



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list