Skip to content

Commit 0474968

Browse files
committed
Fix false positive warnings with dispatch_get_*_queue() call
https://bugs.webkit.org/show_bug.cgi?id=298774 Reviewed by Chris Dumez. Introduce "*Singleton" version of dispatch_get_global_queue to to turn off clang safer cpp warnings. * Source/WTF/wtf/darwin/DispatchExtras.h: (WTF::globalDispatchQueueSingleton): Introduce new function. * Source/WebKit/GPUProcess/mac/GPUProcessMac.mm: (WebKit::GPUProcess::openDirectoryCacheInvalidated): * Source/WebKit/NetworkProcess/cache/NetworkCacheDataCocoa.mm: (WebKit::NetworkCache::Data::adoptMap): * Source/WebKit/NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm: (WebKit::NetworkCache::IOChannel::IOChannel): * Source/WebKit/SaferCPPExpectations/UnretainedCallArgsCheckerExpectations: * Source/WebKit/Shared/Cocoa/XPCEndpointClient.mm: (WebKit::XPCEndpointClient::setEndpoint): * Source/WebKit/Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm: (WebKit::XPCServiceEventHandler): * Source/WebKit/UIProcess/Cocoa/GPUProcessProxyCocoa.mm: (WebKit::GPUProcessProxy::sendBookmarkDataForCacheDirectory): * Source/WebKit/UIProcess/Cocoa/PreferenceObserver.mm: (-[WKUserDefaults _notifyObserversOfChangeFromValuesForKeys:toValuesForKeys:]): * Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm: (WebKit::WebProcessPool::platformInitialize): (WebKit::WebProcessPool::initializeHardwareKeyboardAvailability): (WebKit::WebProcessPool::startObservingPreferenceChanges): (WebKit::WebProcessPool::registerNotificationObservers): (WebKit::WebProcessPool::registerAssetFonts): (WebKit::globalQueueSingleton): Deleted. * Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm: (WebKit::WebProcessProxy::sendAudioComponentRegistrations): * Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionContextCocoa.mm: (WebKit::WebExtensionContext::compileDeclarativeNetRequestRules): * Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp: (WebKit::GPUProcessProxy::didFinishLaunching): * Source/WebKit/UIProcess/WebAuthentication/Cocoa/HidConnection.mm: (WebKit::HidConnection::send): * Source/WebKit/UIProcess/WebAuthentication/Mock/MockHidConnection.cpp: (WebKit::MockHidConnection::send): * Source/WebKit/UIProcess/WebAuthentication/Mock/MockNfcService.mm: (WebKit::MockNfcService::detectTags const): * Source/WebKit/UIProcess/WebAuthentication/Virtual/VirtualHidConnection.cpp: (WebKit::VirtualHidConnection::send): * Source/WebKit/UIProcess/ios/WKContentView.mm: (-[WKContentView _removeTemporaryFilesIfNecessary]): * Source/WebKit/UIProcess/ios/forms/WKFileUploadPanel.mm: * Source/WebKit/UIProcess/mac/WebViewImpl.mm: (WebKit::handleLegacyFilesPasteboard): * Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm: (WebKit::WebProcess::platformInitializeWebProcess): (WebKit::WebProcess::releaseSystemMallocMemory): (WebKit::WebProcess::openDirectoryCacheInvalidated): * Tools/Scripts/webkitpy/style/checkers/cpp.py: (check_safer_cpp): Add checker for dispatch_get_global_queue. (CppChecker): Ditto. * Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py: (CppStyleTest): Don't use forbidden function in this test/ Canonical link: https://commits.webkit.org/300031@main
1 parent 0585f9e commit 0474968

File tree

23 files changed

+59
-37
lines changed

23 files changed

+59
-37
lines changed

Source/WTF/wtf/darwin/DispatchExtras.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,17 @@
2929

3030
namespace WTF {
3131

32+
inline dispatch_queue_t globalDispatchQueueSingleton(intptr_t identifier, uintptr_t flags)
33+
{
34+
return dispatch_get_global_queue(identifier, flags); // NOLINT
35+
}
36+
3237
inline dispatch_queue_main_t mainDispatchQueueSingleton()
3338
{
3439
return dispatch_get_main_queue(); // NOLINT
3540
}
3641

3742
} // namespace WTF
3843

44+
using WTF::globalDispatchQueueSingleton;
3945
using WTF::mainDispatchQueueSingleton;

Source/WebKit/GPUProcess/mac/GPUProcessMac.mm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
#import <wtf/BlockPtr.h>
4343
#import <wtf/MemoryPressureHandler.h>
4444
#import <wtf/ProcessPrivilege.h>
45+
#import <wtf/darwin/DispatchExtras.h>
4546
#import <wtf/text/WTFString.h>
4647

4748
namespace WebKit {
@@ -113,8 +114,7 @@
113114
auto cacheInvalidationHandler = [handle = WTFMove(handle)] () mutable {
114115
AuxiliaryProcess::openDirectoryCacheInvalidated(WTFMove(handle));
115116
};
116-
RetainPtr queue = dispatch_get_global_queue(QOS_CLASS_UTILITY, 0);
117-
dispatch_async(queue.get(), makeBlockPtr(WTFMove(cacheInvalidationHandler)).get());
117+
dispatch_async(globalDispatchQueueSingleton(QOS_CLASS_UTILITY, 0), makeBlockPtr(WTFMove(cacheInvalidationHandler)).get());
118118
}
119119
#endif // PLATFORM(MAC)
120120

Source/WebKit/NetworkProcess/cache/NetworkCacheDataCocoa.mm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@
2727
#import "NetworkCacheData.h"
2828

2929
#import <WebCore/SharedMemory.h>
30-
#import <dispatch/dispatch.h>
3130
#import <sys/mman.h>
3231
#import <sys/stat.h>
3332
#import <wtf/FileHandle.h>
3433
#import <wtf/cocoa/SpanCocoa.h>
3534
#import <wtf/cocoa/VectorCocoa.h>
35+
#import <wtf/darwin/DispatchExtras.h>
3636

3737
namespace WebKit {
3838
namespace NetworkCache {
@@ -108,7 +108,7 @@ Data concatenate(const Data& a, const Data& b)
108108
ASSERT(span.data());
109109
ASSERT(span.data() != MAP_FAILED);
110110
outputHandle = { };
111-
auto bodyMap = adoptOSObject(dispatch_data_create(span.data(), span.size(), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), [span] {
111+
auto bodyMap = adoptOSObject(dispatch_data_create(span.data(), span.size(), globalDispatchQueueSingleton(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), [span] {
112112
munmap(span.data(), span.size());
113113
}));
114114
return { WTFMove(bodyMap), Data::Backing::Map };

Source/WebKit/NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#import <sys/mman.h>
3434
#import <sys/stat.h>
3535
#import <wtf/BlockPtr.h>
36+
#import <wtf/darwin/DispatchExtras.h>
3637
#import <wtf/text/CString.h>
3738

3839
namespace WebKit {
@@ -79,7 +80,7 @@ static long dispatchQueueIdentifier(WorkQueue::QOS qos)
7980
}
8081

8182
int fd = ::open(path.data(), oflag, mode);
82-
m_dispatchIO = adoptOSObject(dispatch_io_create(DISPATCH_IO_RANDOM, fd, dispatch_get_global_queue(dispatchQueueIdentifier(dispatchQOS), 0), [fd](int) {
83+
m_dispatchIO = adoptOSObject(dispatch_io_create(DISPATCH_IO_RANDOM, fd, globalDispatchQueueSingleton(dispatchQueueIdentifier(dispatchQOS), 0), [fd](int) {
8384
close(fd);
8485
}));
8586
ASSERT(m_dispatchIO.get());

Source/WebKit/SaferCPPExpectations/UnretainedCallArgsCheckerExpectations

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ UIProcess/Cocoa/LegacyDownloadClient.mm
113113
UIProcess/Cocoa/MediaPermissionUtilities.mm
114114
UIProcess/Cocoa/NavigationState.mm
115115
UIProcess/Cocoa/PageClientImplCocoa.mm
116-
UIProcess/Cocoa/PreferenceObserver.mm
117116
UIProcess/Cocoa/ResourceLoadDelegate.mm
118117
UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm
119118
UIProcess/Cocoa/UIDelegate.mm
@@ -139,7 +138,6 @@ UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm
139138
UIProcess/RemoteLayerTree/mac/RemoteLayerTreeDrawingAreaProxyMac.mm
140139
UIProcess/RemoteLayerTree/mac/RemoteLayerTreeEventDispatcher.mm
141140
UIProcess/WebAuthentication/Cocoa/CcidConnection.mm
142-
UIProcess/WebAuthentication/Cocoa/HidConnection.mm
143141
UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm
144142
UIProcess/WebAuthentication/Cocoa/LocalConnection.mm
145143
UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm

Source/WebKit/Shared/Cocoa/XPCEndpointClient.mm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
#import "Logging.h"
3030
#import <wtf/cocoa/Entitlements.h>
31+
#import <wtf/darwin/DispatchExtras.h>
3132
#import <wtf/spi/darwin/XPCSPI.h>
3233
#import <wtf/text/ASCIILiteral.h>
3334

@@ -43,7 +44,7 @@
4344

4445
m_connection = adoptOSObject(xpc_connection_create_from_endpoint(endpoint));
4546

46-
xpc_connection_set_target_queue(m_connection.get(), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0));
47+
xpc_connection_set_target_queue(m_connection.get(), globalDispatchQueueSingleton(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0));
4748
xpc_connection_set_event_handler(m_connection.get(), ^(xpc_object_t message) {
4849
xpc_type_t type = xpc_get_type(message);
4950
if (type == XPC_TYPE_ERROR) {

Source/WebKit/Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
#import <wtf/StdLibExtras.h>
4545
#import <wtf/WTFProcess.h>
4646
#import <wtf/cocoa/TypeCastsCocoa.h>
47+
#import <wtf/darwin/DispatchExtras.h>
4748
#import <wtf/darwin/XPCExtras.h>
4849
#import <wtf/spi/cocoa/OSLogSPI.h>
4950
#import <wtf/spi/darwin/SandboxSPI.h>
@@ -142,7 +143,7 @@ void XPCServiceEventHandler(xpc_connection_t peer)
142143
{
143144
OSObjectPtr<xpc_connection_t> retainedPeerConnection(peer);
144145

145-
xpc_connection_set_target_queue(peer, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0));
146+
xpc_connection_set_target_queue(peer, globalDispatchQueueSingleton(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0));
146147
xpc_connection_set_event_handler(peer, ^(xpc_object_t event) {
147148
xpc_type_t type = xpc_get_type(event);
148149
if (type != XPC_TYPE_DICTIONARY) {

Source/WebKit/UIProcess/Cocoa/GPUProcessProxyCocoa.mm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include "WebProcessProxy.h"
3636
#include <wtf/cf/TypeCastsCF.h>
3737
#include <wtf/cocoa/SpanCocoa.h>
38+
#include <wtf/darwin/DispatchExtras.h>
3839

3940
#if HAVE(POWERLOG_TASK_MODE_QUERY)
4041
#include <pal/spi/mac/PowerLogSPI.h>
@@ -111,7 +112,7 @@
111112
void GPUProcessProxy::sendBookmarkDataForCacheDirectory()
112113
{
113114
Ref protectedConnection = connection();
114-
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), makeBlockPtr([protectedConnection = WTFMove(protectedConnection)] () mutable {
115+
dispatch_async(globalDispatchQueueSingleton(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), makeBlockPtr([protectedConnection = WTFMove(protectedConnection)] () mutable {
115116
NSError *error = nil;
116117
RetainPtr directoryURL = [[NSFileManager defaultManager] URLForDirectory:NSLibraryDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:&error];
117118
RetainPtr url = adoptNS([[NSURL alloc] initFileURLWithPath:@"Caches/com.apple.WebKit.GPU/" relativeToURL:directoryURL.get()]);

Source/WebKit/UIProcess/Cocoa/PreferenceObserver.mm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#import "WebProcessPool.h"
3030
#import <pal/spi/cocoa/NSUserDefaultsSPI.h>
3131
#import <wtf/WeakObjCPtr.h>
32+
#import <wtf/darwin/DispatchExtras.h>
3233

3334
@interface WKUserDefaults : NSUserDefaults {
3435
@private
@@ -97,7 +98,7 @@ - (void)_notifyObserversOfChangeFromValuesForKeys:(NSDictionary<NSString *, id>
9798
return;
9899
}
99100

100-
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), [self, protectedSelf = retainPtr(self), oldValues = retainPtr(oldValues), newValues = retainPtr(newValues)] {
101+
dispatch_async(globalDispatchQueueSingleton(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), [self, protectedSelf = retainPtr(self), oldValues = retainPtr(oldValues), newValues = retainPtr(newValues)] {
101102
[self findPreferenceChangesAndNotifyForKeys:oldValues.get() toValuesForKeys:newValues.get()];
102103
});
103104
}

Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -241,11 +241,6 @@ static void registerUserDefaults()
241241
return cachedLockdownModeEnabledGlobally;
242242
}
243243

244-
static dispatch_queue_t globalQueueSingleton()
245-
{
246-
return dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
247-
}
248-
249244
#if PLATFORM(MAC)
250245
static NSApplication* NSAppSingleton()
251246
{
@@ -355,7 +350,7 @@ static void logProcessPoolState(const WebProcessPool& pool)
355350

356351
#if PLATFORM(IOS_FAMILY) && !PLATFORM(MACCATALYST)
357352
if (!_MGCacheValid()) {
358-
dispatch_async(globalQueueSingleton(), ^{
353+
dispatch_async(globalDispatchQueueSingleton(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
359354
[adoptNS([[objc_getClass("MobileGestaltHelperProxy") alloc] init]) proxyRebuildCache];
360355
});
361356
}
@@ -725,7 +720,7 @@ static void logProcessPoolState(const WebProcessPool& pool)
725720

726721
void WebProcessPool::initializeHardwareKeyboardAvailability()
727722
{
728-
dispatch_async(globalQueueSingleton(), makeBlockPtr([weakThis = WeakPtr { *this }] {
723+
dispatch_async(globalDispatchQueueSingleton(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), makeBlockPtr([weakThis = WeakPtr { *this }] {
729724
auto keyboardState = currentHardwareKeyboardState();
730725
callOnMainRunLoop([weakThis = WTFMove(weakThis), keyboardState] {
731726
RefPtr protectedThis = weakThis.get();
@@ -743,7 +738,7 @@ static void logProcessPoolState(const WebProcessPool& pool)
743738
{
744739
static dispatch_once_t onceToken;
745740
dispatch_once(&onceToken, ^{
746-
dispatch_async(globalQueueSingleton(), ^{
741+
dispatch_async(globalDispatchQueueSingleton(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
747742
// Start observing preference changes.
748743
[WKPreferenceObserver sharedInstance];
749744
});
@@ -782,7 +777,7 @@ static void logProcessPoolState(const WebProcessPool& pool)
782777

783778
m_notifyTokens = WTF::compactMap(notificationMessages, [weakThis = WeakPtr { *this }](const ASCIILiteral& message) -> std::optional<int> {
784779
int notifyToken = 0;
785-
auto registerStatus = notify_register_dispatch(message, &notifyToken, globalQueueSingleton(), [weakThis, message](int token) {
780+
auto registerStatus = notify_register_dispatch(message, &notifyToken, globalDispatchQueueSingleton(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), [weakThis, message](int token) {
786781
uint64_t state = 0;
787782
auto status = notify_get_state(token, &state);
788783
callOnMainRunLoop([weakThis, message, state, status] {
@@ -1652,7 +1647,7 @@ static URL fontURLFromName(ASCIILiteral fontName)
16521647
return true;
16531648
});
16541649

1655-
dispatch_async(globalQueueSingleton(), [descriptions = RetainPtr<NSArray>(descriptions), blockPtr] {
1650+
dispatch_async(globalDispatchQueueSingleton(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), [descriptions = RetainPtr<NSArray>(descriptions), blockPtr] {
16561651
CTFontDescriptorMatchFontDescriptorsWithProgressHandler((__bridge CFArrayRef)descriptions.get(), nullptr, blockPtr.get());
16571652
});
16581653
}

0 commit comments

Comments
 (0)