WebKit Bugzilla
Attachment 343831 Details for
Bug 187150
: Handle the case of registerMDNSNameCallback called several times
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-187150-20180628120846.patch (text/plain), 5.45 KB, created by
youenn fablet
on 2018-06-28 12:08:47 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2018-06-28 12:08:47 PDT
Size:
5.45 KB
patch
obsolete
>Subversion Revision: 233256 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 992ad68b3707e52189fdb213703b6665c531fb2f..51b72c81c3e227443dacc555e0c8f5995ca72a88 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,26 @@ >+2018-06-28 Youenn Fablet <youenn@apple.com> >+ >+ Handle the case of registerMDNSNameCallback called several times >+ https://bugs.webkit.org/show_bug.cgi?id=187150 >+ <rdar://problem/41329832> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ This is a speculative fix on the basis that registerMDNSNameCallback may be called several times. >+ In that case, we would have freed the context after the first call and would reuse it for the second call. >+ >+ Instead, keep a map of pending requests and pass to registerMDNSNameCallback an identifier to that map. >+ If the map has no value for that identifier, return early. >+ >+ * NetworkProcess/webrtc/NetworkMDNSRegister.cpp: >+ (WebKit::NetworkMDNSRegister::~NetworkMDNSRegister): >+ (WebKit::pendingRegistrationRequests): >+ (WebKit::registerMDNSNameCallback): >+ (WebKit::NetworkMDNSRegister::clearPendingRequests): >+ (WebKit::NetworkMDNSRegister::registerMDNSName): >+ * NetworkProcess/webrtc/NetworkMDNSRegister.h: >+ (): Deleted. >+ > 2018-06-28 Youenn Fablet <youenn@apple.com> > > Add sandbox to microdone plugin >diff --git a/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.cpp b/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.cpp >index 8f9ca1065d193052403616b77780af98c0d910f9..f8df6855a9fe5fb2d8ca77e993bf4db270495c83 100644 >--- a/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.cpp >+++ b/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.cpp >@@ -51,6 +51,7 @@ NetworkMDNSRegister::~NetworkMDNSRegister() > #if ENABLE_MDNS > for (auto& value : m_services.values()) > DNSServiceRefDeallocate(value); >+ clearPendingRequests(); > #endif > } > >@@ -79,9 +80,20 @@ struct PendingRegistrationRequest { > DNSRecordRef record; > }; > >+ >+static uintptr_t pendingRegistrationRequestCount = 1; >+static HashMap<uintptr_t, std::unique_ptr<PendingRegistrationRequest>>& pendingRegistrationRequests() >+{ >+ ASSERT(RunLoop::isMain()); >+ static NeverDestroyed<HashMap<uintptr_t, std::unique_ptr<PendingRegistrationRequest>>> map; >+ return map; >+} >+ > static void registerMDNSNameCallback(DNSServiceRef, DNSRecordRef record, DNSServiceFlags, DNSServiceErrorType errorCode, void *context) > { >- std::unique_ptr<PendingRegistrationRequest> request { static_cast<PendingRegistrationRequest*>(context) }; >+ auto request = pendingRegistrationRequests().take(reinterpret_cast<uintptr_t>(context)); >+ if (!request) >+ return; > > RELEASE_LOG_IF_ALLOWED_IN_CALLBACK(request->sessionID, "registerMDNSNameCallback with error %d", errorCode); > >@@ -92,6 +104,13 @@ static void registerMDNSNameCallback(DNSServiceRef, DNSRecordRef record, DNSServ > request->connection->send(Messages::WebMDNSRegister::FinishedRegisteringMDNSName { request->requestIdentifier, request->name }, 0); > } > >+void NetworkMDNSRegister::clearPendingRequests() >+{ >+ auto& map = pendingRegistrationRequests(); >+ for (auto identifier : m_pendingRequests) >+ map.remove(identifier); >+} >+ > void NetworkMDNSRegister::registerMDNSName(uint64_t requestIdentifier, PAL::SessionID sessionID, DocumentIdentifier documentIdentifier, const String& ipAddress) > { > DNSServiceRef service; >@@ -115,7 +134,7 @@ void NetworkMDNSRegister::registerMDNSName(uint64_t requestIdentifier, PAL::Sess > service = iterator->value; > > String baseName = createCanonicalUUIDString(); >- String name = makeString(baseName, String::number(++m_registrationCount), ".local"); >+ String name = makeString(baseName, String::number(pendingRegistrationRequestCount), ".local"); > > auto ip = inet_addr(ipAddress.utf8().data()); > >@@ -138,13 +157,13 @@ void NetworkMDNSRegister::registerMDNSName(uint64_t requestIdentifier, PAL::Sess > &ip, > 0, > registerMDNSNameCallback, >- pendingRequest.get()); >+ reinterpret_cast<void*>(pendingRegistrationRequestCount)); > if (error) { > RELEASE_LOG_IF_ALLOWED(sessionID, "registerMDNSName DNSServiceRegisterRecord error %d", error); > m_connection.connection().send(Messages::WebMDNSRegister::FinishedRegisteringMDNSName { requestIdentifier, makeUnexpected(MDNSRegisterError::DNSSD) }, 0); > return; > } >- pendingRequest.release(); >+ pendingRegistrationRequests().add(pendingRegistrationRequestCount++, WTFMove(pendingRequest)); > } > > struct PendingResolutionRequest { >diff --git a/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.h b/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.h >index 081138808c07a0990b6fce6b83173d8e77d6bd58..665faa706ef05bf952d8996fe7a44eb537593167 100644 >--- a/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.h >+++ b/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.h >@@ -68,11 +68,12 @@ private: > void registerMDNSName(uint64_t requestIdentifier, PAL::SessionID, WebCore::DocumentIdentifier, const String& ipAddress); > void resolveMDNSName(uint64_t requestIdentifier, PAL::SessionID, const String& name); > >+ void clearPendingRequests(); >+ > NetworkConnectionToWebProcess& m_connection; > #if ENABLE_MDNS > HashMap<WebCore::DocumentIdentifier, DNSServiceRef> m_services; >- >- uint64_t m_registrationCount { 0 }; >+ Vector<uintptr_t> m_pendingRequests; > #endif > }; >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 187150
:
343831
|
343832