Title: [233328] trunk/Source/WebKit
- Revision
- 233328
- Author
- [email protected]
- Date
- 2018-06-28 14:23:33 -0700 (Thu, 28 Jun 2018)
Log Message
Handle the case of registerMDNSNameCallback called several times
https://bugs.webkit.org/show_bug.cgi?id=187150
<rdar://problem/41329832>
Reviewed by Eric Carlson.
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.
Modified Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (233327 => 233328)
--- trunk/Source/WebKit/ChangeLog 2018-06-28 21:21:41 UTC (rev 233327)
+++ trunk/Source/WebKit/ChangeLog 2018-06-28 21:23:33 UTC (rev 233328)
@@ -1,3 +1,26 @@
+2018-06-28 Youenn Fablet <[email protected]>
+
+ Handle the case of registerMDNSNameCallback called several times
+ https://bugs.webkit.org/show_bug.cgi?id=187150
+ <rdar://problem/41329832>
+
+ Reviewed by Eric Carlson.
+
+ 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 Chris Dumez <[email protected]>
Unreviewed attempt to fix Win Cairo build after r233310.
Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.cpp (233327 => 233328)
--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.cpp 2018-06-28 21:21:41 UTC (rev 233327)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.cpp 2018-06-28 21:23:33 UTC (rev 233328)
@@ -79,9 +79,20 @@
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);
@@ -115,7 +126,7 @@
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 +149,13 @@
&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 {
Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.h (233327 => 233328)
--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.h 2018-06-28 21:21:41 UTC (rev 233327)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.h 2018-06-28 21:23:33 UTC (rev 233328)
@@ -71,8 +71,6 @@
NetworkConnectionToWebProcess& m_connection;
#if ENABLE_MDNS
HashMap<WebCore::DocumentIdentifier, DNSServiceRef> m_services;
-
- uint64_t m_registrationCount { 0 };
#endif
};
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes