From 65872873d260950273b45bc3064eaab4e165b671 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Gjesse?= Date: Mon, 5 Oct 2015 12:25:20 +0200 Subject: [PATCH] Remove server socket references The use of server socket references was deprecated in 1.9 and marked for removal in 1.10. R=kustermann@google.com BUG=http://dartbug.com/22187 Review URL: https://codereview.chromium.org/1072783003 . --- runtime/bin/io_natives.cc | 1 - runtime/bin/socket.cc | 23 ------ runtime/bin/socket.h | 7 -- runtime/bin/socket_patch.dart | 57 --------------- sdk/lib/io/socket.dart | 69 ------------------ ...erence_issue21383_and_issue21384_test.dart | 73 ------------------- tests/standalone/io/socket_bind_test.dart | 65 ----------------- 7 files changed, 295 deletions(-) delete mode 100644 tests/standalone/io/server_socket_reference_issue21383_and_issue21384_test.dart diff --git a/runtime/bin/io_natives.cc b/runtime/bin/io_natives.cc index 9c28ac1b26e..086e9f3de09 100644 --- a/runtime/bin/io_natives.cc +++ b/runtime/bin/io_natives.cc @@ -132,7 +132,6 @@ namespace bin { V(Socket_SetOption, 4) \ V(Socket_JoinMulticast, 4) \ V(Socket_LeaveMulticast, 4) \ - V(Socket_MarkSocketAsSharedHack, 1) \ V(Socket_GetSocketId, 1) \ V(Socket_SetSocketId, 2) \ V(Stdin_ReadByte, 1) \ diff --git a/runtime/bin/socket.cc b/runtime/bin/socket.cc index ea5154e271a..b0b6a345d30 100644 --- a/runtime/bin/socket.cc +++ b/runtime/bin/socket.cc @@ -170,20 +170,6 @@ bool ListeningSocketRegistry::CloseSafe(intptr_t socketfd) { } -Dart_Handle ListeningSocketRegistry::MarkSocketFdAsSharableHack( - intptr_t socketfd) { - MutexLocker ml(ListeningSocketRegistry::mutex_); - - SocketsIterator it = sockets_by_fd_.find(socketfd); - if (it != sockets_by_fd_.end()) { - it->second->shared = true; - return Dart_True(); - } else { - return Dart_False(); - } -} - - void FUNCTION_NAME(InternetAddress_Parse)(Dart_NativeArguments args) { const char* address = DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); @@ -855,15 +841,6 @@ void FUNCTION_NAME(Socket_LeaveMulticast)(Dart_NativeArguments args) { } -void FUNCTION_NAME(Socket_MarkSocketAsSharedHack)(Dart_NativeArguments args) { - intptr_t socketfd = - Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); - - ListeningSocketRegistry *registry = ListeningSocketRegistry::Instance(); - Dart_SetReturnValue(args, registry->MarkSocketFdAsSharableHack(socketfd)); -} - - void Socket::SetSocketIdNativeField(Dart_Handle socket, intptr_t id) { Dart_Handle err = Dart_SetNativeInstanceField(socket, kSocketIdNativeField, id); diff --git a/runtime/bin/socket.h b/runtime/bin/socket.h index 507acd90fcb..1910f863fd0 100644 --- a/runtime/bin/socket.h +++ b/runtime/bin/socket.h @@ -395,13 +395,6 @@ class ListeningSocketRegistry { // this function. bool CloseSafe(intptr_t socketfd); - // Mark an existing socket as sharable if it is not already marked as - // sharable. - // - // NOTE: This is a temporary measure until ServerSocketReference's are - // removed. - Dart_Handle MarkSocketFdAsSharableHack(intptr_t socketfd); - Mutex *mutex() { return mutex_; } private: diff --git a/runtime/bin/socket_patch.dart b/runtime/bin/socket_patch.dart index 47e5f444f16..7de16a98822 100644 --- a/runtime/bin/socket_patch.dart +++ b/runtime/bin/socket_patch.dart @@ -1083,8 +1083,6 @@ class _NativeSocket extends _NativeSocketNativeWrapper with _ServiceObject { bool nativeLeaveMulticast( List addr, List interfaceAddr, int interfaceIndex) native "Socket_LeaveMulticast"; - bool _nativeMarkSocketAsSharedHack() - native "Socket_MarkSocketAsSharedHack"; } @@ -1187,50 +1185,10 @@ class _RawServerSocket extends Stream } } - RawServerSocketReference get reference { - if (_referencePort == null) { - bool successfull = _socket._nativeMarkSocketAsSharedHack(); - _referencePort = new ReceivePort(); - _referencePort.listen((sendPort) { - sendPort.send( - [_socket.address, - _socket.port, - _v6Only]); - }); - } - return new _RawServerSocketReference(_referencePort.sendPort); - } - void set _owner(owner) { _socket.owner = owner; } } -class _RawServerSocketReference implements RawServerSocketReference { - final SendPort _sendPort; - - _RawServerSocketReference(this._sendPort); - - Future create() { - var port = new ReceivePort(); - _sendPort.send(port.sendPort); - return port.first.then((List args) { - port.close(); - - InternetAddress address = args[0]; - int tcpPort = args[1]; - bool v6Only = args[2]; - return - RawServerSocket.bind(address, tcpPort, v6Only: v6Only, shared: true); - }); - } - - int get hashCode => _sendPort.hashCode; - - bool operator==(Object other) - => other is _RawServerSocketReference && _sendPort == other._sendPort; -} - - class _RawSocket extends Stream implements RawSocket { final _NativeSocket _socket; @@ -1393,17 +1351,6 @@ patch class ServerSocket { } -class _ServerSocketReference implements ServerSocketReference { - final RawServerSocketReference _rawReference; - - _ServerSocketReference(this._rawReference); - - Future create() { - return _rawReference.create().then((raw) => new _ServerSocket(raw)); - } -} - - class _ServerSocket extends Stream implements ServerSocket { final _socket; @@ -1436,10 +1383,6 @@ class _ServerSocket extends Stream Future close() => _socket.close().then((_) => this); - ServerSocketReference get reference { - return new _ServerSocketReference(_socket.reference); - } - void set _owner(owner) { _socket._owner = owner; } } diff --git a/sdk/lib/io/socket.dart b/sdk/lib/io/socket.dart index a759598def0..64191810b7c 100644 --- a/sdk/lib/io/socket.dart +++ b/sdk/lib/io/socket.dart @@ -253,41 +253,6 @@ abstract class RawServerSocket implements Stream { * is fully closed and is no longer bound. */ Future close(); - - /** - * Get the [RawServerSocketReference]. - * - * WARNING: This feature is *highly experimental* and currently only - * works on Linux. The API will be removed in Dart 1.10. Use the - * `shared` optional argument on the `bind` method instead. - * - * The returned [RawServerSocketReference] can be used to create other - * [RawServerSocket]s listening on the same port, - * using [RawServerSocketReference.create]. - * Incoming connections on the port will be distributed fairly between the - * active server sockets. - * The [RawServerSocketReference] can be distributed to other isolates through - * a [RawSendPort]. - */ - - @Deprecated('This will be removed in Dart 1.10. Use the ' - '`shared` optional argument on the `bind` method instead.') - RawServerSocketReference get reference; -} - - -/** - * A [RawServerSocketReference]. - * - * WARNING: This class is used with [RawServerSocket.reference] which is highly - * experimental. - */ -@Deprecated('This will be removed in Dart 1.10.') -abstract class RawServerSocketReference { - /** - * Create a new [RawServerSocket], from this reference. - */ - Future create(); } @@ -358,40 +323,6 @@ abstract class ServerSocket implements Stream { * is fully closed and is no longer bound. */ Future close(); - - /** - * Get the [ServerSocketReference]. - * - * WARNING: This feature is *highly experimental* and currently only - * works on Linux. The API will be removed in Dart 1.10. Use the - * `shared` optional argument on the `bind` method instead. - * - * The returned [ServerSocketReference] can be used to create other - * [ServerSocket]s listening on the same port, - * using [ServerSocketReference.create]. - * Incoming connections on the port will be distributed fairly between the - * active server sockets. - * The [ServerSocketReference] can be distributed to other isolates through a - * [SendPort]. - */ - @Deprecated('This will be removed in Dart 1.10. Use the ' - '`shared` optional argument on the `bind` method instead.') - ServerSocketReference get reference; -} - - -/** - * A [ServerSocketReference]. - * - * WARNING: This class is used with [ServerSocket.reference] which is highly - * experimental. - */ -@Deprecated('This will be removed in Dart 1.10.') -abstract class ServerSocketReference { - /** - * Create a new [ServerSocket], from this reference. - */ - Future create(); } diff --git a/tests/standalone/io/server_socket_reference_issue21383_and_issue21384_test.dart b/tests/standalone/io/server_socket_reference_issue21383_and_issue21384_test.dart deleted file mode 100644 index 95e0363ca74..00000000000 --- a/tests/standalone/io/server_socket_reference_issue21383_and_issue21384_test.dart +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -import 'dart:async'; -import 'dart:io'; - -import 'package:async_helper/async_helper.dart'; - - -testBothListen() { - asyncStart(); - ServerSocket.bind('127.0.0.1', 0).then((mainServer) { - mainServer.reference.create().then((refServer) { - refServer.listen((_) {}); - mainServer.listen((_) {}); - Timer.run(() { - mainServer.close(); - refServer.close(); - asyncEnd(); - }); - }); - }); -} - -testRefServerListen() { - asyncStart(); - ServerSocket.bind('127.0.0.1', 0).then((mainServer) { - mainServer.reference.create().then((refServer) { - refServer.listen((_) {}); - Timer.run(() { - mainServer.close(); - refServer.close(); - asyncEnd(); - }); - }); - }); -} - -testMainServerListen() { - asyncStart(); - ServerSocket.bind('127.0.0.1', 0).then((mainServer) { - mainServer.reference.create().then((refServer) { - mainServer.listen((_) {}); - Timer.run(() { - mainServer.close(); - refServer.close(); - asyncEnd(); - }); - }); - }); -} - -testNoneListen() { - asyncStart(); - ServerSocket.bind('127.0.0.1', 0).then((mainServer) { - mainServer.reference.create().then((refServer) { - Timer.run(() { - mainServer.close(); - refServer.close(); - asyncEnd(); - }); - }); - }); -} - -main() { - testNoneListen(); - testMainServerListen(); - testRefServerListen(); - testBothListen(); -} - diff --git a/tests/standalone/io/socket_bind_test.dart b/tests/standalone/io/socket_bind_test.dart index 9d36c22c062..9c4e1ed284e 100644 --- a/tests/standalone/io/socket_bind_test.dart +++ b/tests/standalone/io/socket_bind_test.dart @@ -82,69 +82,6 @@ Future testBindDifferentAddresses(InternetAddress addr1, }); } -testSocketReferenceInteroperability(String host) { - asyncStart(); - ServerSocket.bind(host, 0).then((ServerSocket socket) { - Expect.isTrue(socket.port > 0); - - asyncStart(); - socket.reference.create().then((socket2) { - bool gotResponseFrom1; - bool gotResponseFrom2; - - Expect.isTrue(socket.port > 0); - Expect.equals(socket.port, socket2.port); - - asyncStart(); - asyncStart(); - asyncStart(); - socket.listen((client) { - client.drain().whenComplete(asyncEnd); - client.write('1: hello world'); - client.close().whenComplete(asyncEnd); - // NOTE: Closing the socket un-subscribes as well, which means the - // other client connection must go to the other socket. - socket.close().whenComplete(asyncEnd); - }, onDone: asyncEnd); - - asyncStart(); - asyncStart(); - asyncStart(); - socket2.listen((client) { - client.drain().whenComplete(asyncEnd); - client.write('2: hello world'); - client.close().whenComplete(asyncEnd); - // NOTE: Closing the socket un-subscribes as well, which means the - // other client connection must go to the other socket. - socket2.close().whenComplete(asyncEnd); - }, onDone: asyncEnd); - - var futures = []; - for (int i = 0; i < 2; i++) { - asyncStart(); - futures.add( - Socket.connect(socket.address, socket.port).then((Socket socket) { - socket.close().whenComplete(asyncEnd); - asyncStart(); - return socket - .transform(ASCII.decoder).join('').then((String result) { - if (result == '1: hello world') gotResponseFrom1 = true; - else if (result == '2: hello world') gotResponseFrom2 = true; - else throw 'Unexpected result from server: $result'; - asyncEnd(); - }); - })); - } - asyncStart(); - Future.wait(futures).then((_) { - Expect.isTrue(gotResponseFrom1); - Expect.isTrue(gotResponseFrom2); - asyncEnd(); - }); - }); - }); -} - testListenCloseListenClose(String host) async { asyncStart(); @@ -184,8 +121,6 @@ void main() { negTestBindV6OnlyMismatch(host, true); negTestBindV6OnlyMismatch(host, false); - testSocketReferenceInteroperability(host); - testListenCloseListenClose(host); }