diff --git a/BUILD b/BUILD
index 98622fd7ecc..81de8203a03 100644
--- a/BUILD
+++ b/BUILD
@@ -724,7 +724,6 @@ grpc_cc_library(
"src/core/lib/iomgr/endpoint_pair_windows.cc",
"src/core/lib/iomgr/error.cc",
"src/core/lib/iomgr/error_cfstream.cc",
- "src/core/lib/iomgr/ev_apple.cc",
"src/core/lib/iomgr/ev_epoll1_linux.cc",
"src/core/lib/iomgr/ev_epollex_linux.cc",
"src/core/lib/iomgr/ev_poll_posix.cc",
@@ -886,7 +885,6 @@ grpc_cc_library(
"src/core/lib/iomgr/error.h",
"src/core/lib/iomgr/error_cfstream.h",
"src/core/lib/iomgr/error_internal.h",
- "src/core/lib/iomgr/ev_apple.h",
"src/core/lib/iomgr/ev_epoll1_linux.h",
"src/core/lib/iomgr/ev_epollex_linux.h",
"src/core/lib/iomgr/ev_poll_posix.h",
@@ -991,6 +989,7 @@ grpc_cc_library(
],
language = "c++",
public_hdrs = GRPC_PUBLIC_HDRS,
+ use_cfstream = True,
deps = [
"eventmanager_libuv",
"gpr_base",
diff --git a/BUILD.gn b/BUILD.gn
index bc56c6e571f..129ad2b2639 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -604,8 +604,6 @@ config("grpc_config") {
"src/core/lib/iomgr/error_cfstream.cc",
"src/core/lib/iomgr/error_cfstream.h",
"src/core/lib/iomgr/error_internal.h",
- "src/core/lib/iomgr/ev_apple.cc",
- "src/core/lib/iomgr/ev_apple.h",
"src/core/lib/iomgr/ev_epoll1_linux.cc",
"src/core/lib/iomgr/ev_epoll1_linux.h",
"src/core/lib/iomgr/ev_epollex_linux.cc",
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7c2ed457f9d..4fc05f7c174 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1512,7 +1512,6 @@ add_library(grpc
src/core/lib/iomgr/endpoint_pair_windows.cc
src/core/lib/iomgr/error.cc
src/core/lib/iomgr/error_cfstream.cc
- src/core/lib/iomgr/ev_apple.cc
src/core/lib/iomgr/ev_epoll1_linux.cc
src/core/lib/iomgr/ev_epollex_linux.cc
src/core/lib/iomgr/ev_poll_posix.cc
@@ -2166,7 +2165,6 @@ add_library(grpc_unsecure
src/core/lib/iomgr/endpoint_pair_windows.cc
src/core/lib/iomgr/error.cc
src/core/lib/iomgr/error_cfstream.cc
- src/core/lib/iomgr/ev_apple.cc
src/core/lib/iomgr/ev_epoll1_linux.cc
src/core/lib/iomgr/ev_epollex_linux.cc
src/core/lib/iomgr/ev_poll_posix.cc
diff --git a/Makefile b/Makefile
index 3c196a328e9..92ac929d3bc 100644
--- a/Makefile
+++ b/Makefile
@@ -3837,7 +3837,6 @@ LIBGRPC_SRC = \
src/core/lib/iomgr/endpoint_pair_windows.cc \
src/core/lib/iomgr/error.cc \
src/core/lib/iomgr/error_cfstream.cc \
- src/core/lib/iomgr/ev_apple.cc \
src/core/lib/iomgr/ev_epoll1_linux.cc \
src/core/lib/iomgr/ev_epollex_linux.cc \
src/core/lib/iomgr/ev_poll_posix.cc \
@@ -4465,7 +4464,6 @@ LIBGRPC_UNSECURE_SRC = \
src/core/lib/iomgr/endpoint_pair_windows.cc \
src/core/lib/iomgr/error.cc \
src/core/lib/iomgr/error_cfstream.cc \
- src/core/lib/iomgr/ev_apple.cc \
src/core/lib/iomgr/ev_epoll1_linux.cc \
src/core/lib/iomgr/ev_epollex_linux.cc \
src/core/lib/iomgr/ev_poll_posix.cc \
diff --git a/build_autogenerated.yaml b/build_autogenerated.yaml
index 0747c4a079b..0f98d3a24ae 100644
--- a/build_autogenerated.yaml
+++ b/build_autogenerated.yaml
@@ -566,7 +566,6 @@ libs:
- src/core/lib/iomgr/error.h
- src/core/lib/iomgr/error_cfstream.h
- src/core/lib/iomgr/error_internal.h
- - src/core/lib/iomgr/ev_apple.h
- src/core/lib/iomgr/ev_epoll1_linux.h
- src/core/lib/iomgr/ev_epollex_linux.h
- src/core/lib/iomgr/ev_poll_posix.h
@@ -939,7 +938,6 @@ libs:
- src/core/lib/iomgr/endpoint_pair_windows.cc
- src/core/lib/iomgr/error.cc
- src/core/lib/iomgr/error_cfstream.cc
- - src/core/lib/iomgr/ev_apple.cc
- src/core/lib/iomgr/ev_epoll1_linux.cc
- src/core/lib/iomgr/ev_epollex_linux.cc
- src/core/lib/iomgr/ev_poll_posix.cc
@@ -1467,7 +1465,6 @@ libs:
- src/core/lib/iomgr/error.h
- src/core/lib/iomgr/error_cfstream.h
- src/core/lib/iomgr/error_internal.h
- - src/core/lib/iomgr/ev_apple.h
- src/core/lib/iomgr/ev_epoll1_linux.h
- src/core/lib/iomgr/ev_epollex_linux.h
- src/core/lib/iomgr/ev_poll_posix.h
@@ -1772,7 +1769,6 @@ libs:
- src/core/lib/iomgr/endpoint_pair_windows.cc
- src/core/lib/iomgr/error.cc
- src/core/lib/iomgr/error_cfstream.cc
- - src/core/lib/iomgr/ev_apple.cc
- src/core/lib/iomgr/ev_epoll1_linux.cc
- src/core/lib/iomgr/ev_epollex_linux.cc
- src/core/lib/iomgr/ev_poll_posix.cc
diff --git a/config.m4 b/config.m4
index b4013a02fbd..6b450315f4f 100644
--- a/config.m4
+++ b/config.m4
@@ -286,7 +286,6 @@ if test "$PHP_GRPC" != "no"; then
src/core/lib/iomgr/endpoint_pair_windows.cc \
src/core/lib/iomgr/error.cc \
src/core/lib/iomgr/error_cfstream.cc \
- src/core/lib/iomgr/ev_apple.cc \
src/core/lib/iomgr/ev_epoll1_linux.cc \
src/core/lib/iomgr/ev_epollex_linux.cc \
src/core/lib/iomgr/ev_poll_posix.cc \
diff --git a/config.w32 b/config.w32
index c0b062aafea..59cdbdb1ce4 100644
--- a/config.w32
+++ b/config.w32
@@ -255,7 +255,6 @@ if (PHP_GRPC != "no") {
"src\\core\\lib\\iomgr\\endpoint_pair_windows.cc " +
"src\\core\\lib\\iomgr\\error.cc " +
"src\\core\\lib\\iomgr\\error_cfstream.cc " +
- "src\\core\\lib\\iomgr\\ev_apple.cc " +
"src\\core\\lib\\iomgr\\ev_epoll1_linux.cc " +
"src\\core\\lib\\iomgr\\ev_epollex_linux.cc " +
"src\\core\\lib\\iomgr\\ev_poll_posix.cc " +
diff --git a/gRPC-C++.podspec b/gRPC-C++.podspec
index 7d546034f95..77980999b59 100644
--- a/gRPC-C++.podspec
+++ b/gRPC-C++.podspec
@@ -445,7 +445,6 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/error.h',
'src/core/lib/iomgr/error_cfstream.h',
'src/core/lib/iomgr/error_internal.h',
- 'src/core/lib/iomgr/ev_apple.h',
'src/core/lib/iomgr/ev_epoll1_linux.h',
'src/core/lib/iomgr/ev_epollex_linux.h',
'src/core/lib/iomgr/ev_poll_posix.h',
@@ -897,7 +896,6 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/error.h',
'src/core/lib/iomgr/error_cfstream.h',
'src/core/lib/iomgr/error_internal.h',
- 'src/core/lib/iomgr/ev_apple.h',
'src/core/lib/iomgr/ev_epoll1_linux.h',
'src/core/lib/iomgr/ev_epollex_linux.h',
'src/core/lib/iomgr/ev_poll_posix.h',
diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec
index 056c7f8a6fd..749e77b3fa7 100644
--- a/gRPC-Core.podspec
+++ b/gRPC-Core.podspec
@@ -654,8 +654,6 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/error_cfstream.cc',
'src/core/lib/iomgr/error_cfstream.h',
'src/core/lib/iomgr/error_internal.h',
- 'src/core/lib/iomgr/ev_apple.cc',
- 'src/core/lib/iomgr/ev_apple.h',
'src/core/lib/iomgr/ev_epoll1_linux.cc',
'src/core/lib/iomgr/ev_epoll1_linux.h',
'src/core/lib/iomgr/ev_epollex_linux.cc',
@@ -1251,7 +1249,6 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/error.h',
'src/core/lib/iomgr/error_cfstream.h',
'src/core/lib/iomgr/error_internal.h',
- 'src/core/lib/iomgr/ev_apple.h',
'src/core/lib/iomgr/ev_epoll1_linux.h',
'src/core/lib/iomgr/ev_epollex_linux.h',
'src/core/lib/iomgr/ev_poll_posix.h',
diff --git a/grpc.gemspec b/grpc.gemspec
index 3dcf652466f..29e5d3d436b 100644
--- a/grpc.gemspec
+++ b/grpc.gemspec
@@ -576,8 +576,6 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/iomgr/error_cfstream.cc )
s.files += %w( src/core/lib/iomgr/error_cfstream.h )
s.files += %w( src/core/lib/iomgr/error_internal.h )
- s.files += %w( src/core/lib/iomgr/ev_apple.cc )
- s.files += %w( src/core/lib/iomgr/ev_apple.h )
s.files += %w( src/core/lib/iomgr/ev_epoll1_linux.cc )
s.files += %w( src/core/lib/iomgr/ev_epoll1_linux.h )
s.files += %w( src/core/lib/iomgr/ev_epollex_linux.cc )
diff --git a/grpc.gyp b/grpc.gyp
index ce39a8ed214..a62c034d65a 100644
--- a/grpc.gyp
+++ b/grpc.gyp
@@ -640,7 +640,6 @@
'src/core/lib/iomgr/endpoint_pair_windows.cc',
'src/core/lib/iomgr/error.cc',
'src/core/lib/iomgr/error_cfstream.cc',
- 'src/core/lib/iomgr/ev_apple.cc',
'src/core/lib/iomgr/ev_epoll1_linux.cc',
'src/core/lib/iomgr/ev_epollex_linux.cc',
'src/core/lib/iomgr/ev_poll_posix.cc',
@@ -1130,7 +1129,6 @@
'src/core/lib/iomgr/endpoint_pair_windows.cc',
'src/core/lib/iomgr/error.cc',
'src/core/lib/iomgr/error_cfstream.cc',
- 'src/core/lib/iomgr/ev_apple.cc',
'src/core/lib/iomgr/ev_epoll1_linux.cc',
'src/core/lib/iomgr/ev_epollex_linux.cc',
'src/core/lib/iomgr/ev_poll_posix.cc',
diff --git a/package.xml b/package.xml
index a8430464cf7..06d1669ec48 100644
--- a/package.xml
+++ b/package.xml
@@ -556,8 +556,6 @@
-
-
diff --git a/src/core/lib/iomgr/cfstream_handle.cc b/src/core/lib/iomgr/cfstream_handle.cc
index 7a78ccd8769..40fb3779651 100644
--- a/src/core/lib/iomgr/cfstream_handle.cc
+++ b/src/core/lib/iomgr/cfstream_handle.cc
@@ -32,7 +32,6 @@
#include "src/core/lib/debug/trace.h"
#include "src/core/lib/iomgr/closure.h"
#include "src/core/lib/iomgr/error_cfstream.h"
-#include "src/core/lib/iomgr/ev_apple.h"
#include "src/core/lib/iomgr/exec_ctx.h"
extern grpc_core::TraceFlag grpc_tcp_trace;
@@ -148,8 +147,8 @@ CFStreamHandle::CFStreamHandle(CFReadStreamRef read_stream,
kCFStreamEventOpenCompleted | kCFStreamEventCanAcceptBytes |
kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered,
CFStreamHandle::WriteCallback, &ctx);
- grpc_apple_register_read_stream(read_stream, dispatch_queue_);
- grpc_apple_register_write_stream(write_stream, dispatch_queue_);
+ CFReadStreamSetDispatchQueue(read_stream, dispatch_queue_);
+ CFWriteStreamSetDispatchQueue(write_stream, dispatch_queue_);
}
CFStreamHandle::~CFStreamHandle() {
diff --git a/src/core/lib/iomgr/ev_apple.cc b/src/core/lib/iomgr/ev_apple.cc
deleted file mode 100644
index d1525828865..00000000000
--- a/src/core/lib/iomgr/ev_apple.cc
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-/// Event engine based on Apple's CFRunLoop API family. If the CFRunLoop engine
-/// is enabled (see iomgr_posix_cfstream.cc), a global thread is started to
-/// handle and trigger all the CFStream events. The CFStream streams register
-/// themselves with the run loop with functions grpc_apple_register_read_stream
-/// and grpc_apple_register_read_stream. Pollsets are dummy and block on a
-/// condition variable in pollset_work().
-
-#include
-
-#include "src/core/lib/iomgr/port.h"
-
-#ifdef GRPC_APPLE_EV
-
-#include
-
-#include
-
-#include "src/core/lib/gprpp/thd.h"
-#include "src/core/lib/iomgr/ev_apple.h"
-
-grpc_core::DebugOnlyTraceFlag grpc_apple_polling_trace(false, "apple_polling");
-
-#ifndef NDEBUG
-#define GRPC_POLLING_TRACE(format, ...) \
- if (GRPC_TRACE_FLAG_ENABLED(grpc_apple_polling_trace)) { \
- gpr_log(GPR_DEBUG, "(polling) " format, __VA_ARGS__); \
- }
-#else
-#define GRPC_POLLING_TRACE(...)
-#endif // NDEBUG
-
-#define GRPC_POLLSET_KICK_BROADCAST ((grpc_pollset_worker*)1)
-
-struct GlobalRunLoopContext {
- grpc_core::CondVar init_cv;
- grpc_core::CondVar input_source_cv;
-
- grpc_core::Mutex mu;
-
- // Whether an input source registration is pending. Protected by mu.
- bool input_source_registered = false;
-
- // The reference to the global run loop object. Protected by mu.
- CFRunLoopRef run_loop;
-
- // Whether the pollset has been globally shut down. Protected by mu.
- bool is_shutdown = false;
-};
-
-struct GrpcAppleWorker {
- // The condition varible to kick the worker. Works with the pollset's lock
- // (GrpcApplePollset.mu).
- grpc_core::CondVar cv;
-
- // Whether the worker is kicked. Protected by the pollset's lock
- // (GrpcApplePollset.mu).
- bool kicked = false;
-};
-
-struct GrpcApplePollset {
- grpc_core::Mutex mu;
-
- // Tracks the current workers in the pollset. Protected by mu.
- std::list workers;
-
- // Whether the pollset is shut down. Protected by mu.
- bool is_shutdown = false;
-
- // Closure to call when shutdown is done. Protected by mu.
- grpc_closure* shutdown_closure;
-
- // Whether there's an outstanding kick that was not processed. Protected by
- // mu.
- bool kicked_without_poller = false;
-};
-
-static GlobalRunLoopContext* gGlobalRunLoopContext = nullptr;
-static grpc_core::Thread* gGlobalRunLoopThread = nullptr;
-
-/// Register the stream with the dispatch queue. Callbacks of the stream will be
-/// issued to the dispatch queue when a network event happens and will be
-/// managed by Grand Central Dispatch.
-static void grpc_apple_register_read_stream_queue(
- CFReadStreamRef read_stream, dispatch_queue_t dispatch_queue) {
- CFReadStreamSetDispatchQueue(read_stream, dispatch_queue);
-}
-
-/// Register the stream with the dispatch queue. Callbacks of the stream will be
-/// issued to the dispatch queue when a network event happens and will be
-/// managed by Grand Central Dispatch.
-static void grpc_apple_register_write_stream_queue(
- CFWriteStreamRef write_stream, dispatch_queue_t dispatch_queue) {
- CFWriteStreamSetDispatchQueue(write_stream, dispatch_queue);
-}
-
-/// Register the stream with the global run loop. Callbacks of the stream will
-/// be issued to the run loop when a network event happens and will be driven by
-/// the global run loop thread gGlobalRunLoopThread.
-static void grpc_apple_register_read_stream_run_loop(
- CFReadStreamRef read_stream, dispatch_queue_t dispatch_queue) {
- GRPC_POLLING_TRACE("Register read stream: %p", read_stream);
- grpc_core::MutexLock lock(&gGlobalRunLoopContext->mu);
- CFReadStreamScheduleWithRunLoop(read_stream, gGlobalRunLoopContext->run_loop,
- kCFRunLoopDefaultMode);
- gGlobalRunLoopContext->input_source_registered = true;
- gGlobalRunLoopContext->input_source_cv.Signal();
-}
-
-/// Register the stream with the global run loop. Callbacks of the stream will
-/// be issued to the run loop when a network event happens, and will be driven
-/// by the global run loop thread gGlobalRunLoopThread.
-static void grpc_apple_register_write_stream_run_loop(
- CFWriteStreamRef write_stream, dispatch_queue_t dispatch_queue) {
- GRPC_POLLING_TRACE("Register write stream: %p", write_stream);
- grpc_core::MutexLock lock(&gGlobalRunLoopContext->mu);
- CFWriteStreamScheduleWithRunLoop(
- write_stream, gGlobalRunLoopContext->run_loop, kCFRunLoopDefaultMode);
- gGlobalRunLoopContext->input_source_registered = true;
- gGlobalRunLoopContext->input_source_cv.Signal();
-}
-
-/// The default implementation of stream registration is to register the stream
-/// to a dispatch queue. However, if the CFRunLoop based pollset is enabled (by
-/// macro and environment variable, see docs in iomgr_posix_cfstream.cc), the
-/// CFStream streams are registered with the global run loop instead (see
-/// pollset_global_init below).
-static void (*grpc_apple_register_read_stream_impl)(
- CFReadStreamRef, dispatch_queue_t) = grpc_apple_register_read_stream_queue;
-static void (*grpc_apple_register_write_stream_impl)(CFWriteStreamRef,
- dispatch_queue_t) =
- grpc_apple_register_write_stream_queue;
-
-void grpc_apple_register_read_stream(CFReadStreamRef read_stream,
- dispatch_queue_t dispatch_queue) {
- grpc_apple_register_read_stream_impl(read_stream, dispatch_queue);
-}
-
-void grpc_apple_register_write_stream(CFWriteStreamRef write_stream,
- dispatch_queue_t dispatch_queue) {
- grpc_apple_register_write_stream_impl(write_stream, dispatch_queue);
-}
-
-/// Drive the run loop in a global singleton thread until the global run loop is
-/// shutdown.
-static void GlobalRunLoopFunc(void* arg) {
- grpc_core::ReleasableMutexLock lock(&gGlobalRunLoopContext->mu);
- gGlobalRunLoopContext->run_loop = CFRunLoopGetCurrent();
- gGlobalRunLoopContext->init_cv.Signal();
-
- while (!gGlobalRunLoopContext->is_shutdown) {
- // CFRunLoopRun() will return immediately if no stream is registered on it.
- // So we wait on a conditional variable until a stream is registered;
- // otherwise we'll be running a spinning loop.
- while (!gGlobalRunLoopContext->input_source_registered) {
- gGlobalRunLoopContext->input_source_cv.Wait(&gGlobalRunLoopContext->mu);
- }
- gGlobalRunLoopContext->input_source_registered = false;
- lock.Unlock();
- CFRunLoopRun();
- lock.Lock();
- }
- lock.Unlock();
-}
-
-// pollset implementation
-
-static void pollset_global_init(void) {
- gGlobalRunLoopContext = new GlobalRunLoopContext;
-
- grpc_apple_register_read_stream_impl =
- grpc_apple_register_read_stream_run_loop;
- grpc_apple_register_write_stream_impl =
- grpc_apple_register_write_stream_run_loop;
-
- grpc_core::MutexLock lock(&gGlobalRunLoopContext->mu);
- gGlobalRunLoopThread =
- new grpc_core::Thread("apple_ev", GlobalRunLoopFunc, nullptr);
- gGlobalRunLoopThread->Start();
- while (gGlobalRunLoopContext->run_loop == NULL)
- gGlobalRunLoopContext->init_cv.Wait(&gGlobalRunLoopContext->mu);
-}
-
-static void pollset_global_shutdown(void) {
- {
- grpc_core::MutexLock lock(&gGlobalRunLoopContext->mu);
- gGlobalRunLoopContext->is_shutdown = true;
- CFRunLoopStop(gGlobalRunLoopContext->run_loop);
- }
- gGlobalRunLoopThread->Join();
- delete gGlobalRunLoopThread;
- delete gGlobalRunLoopContext;
-}
-
-/// The caller must acquire the lock GrpcApplePollset.mu before calling this
-/// function. The lock may be temporarily released when waiting on the condition
-/// variable but will be re-acquired before the function returns.
-///
-/// The Apple pollset simply waits on a condition variable until it is kicked.
-/// The network events are handled in the global run loop thread. Processing of
-/// these events will eventually trigger the kick.
-static grpc_error* pollset_work(grpc_pollset* pollset,
- grpc_pollset_worker** worker,
- grpc_millis deadline) {
- GRPC_POLLING_TRACE("pollset work: %p, worker: %p, deadline: %" PRIu64,
- pollset, worker, deadline);
- GrpcApplePollset* apple_pollset =
- reinterpret_cast(pollset);
- GrpcAppleWorker actual_worker;
- if (worker) {
- *worker = reinterpret_cast(&actual_worker);
- }
-
- if (apple_pollset->kicked_without_poller) {
- // Process the outstanding kick and reset the flag. Do not block.
- apple_pollset->kicked_without_poller = false;
- } else {
- // Block until kicked, timed out, or the pollset shuts down.
- apple_pollset->workers.push_front(&actual_worker);
- auto it = apple_pollset->workers.begin();
-
- while (!actual_worker.kicked && !apple_pollset->is_shutdown) {
- if (actual_worker.cv.Wait(
- &apple_pollset->mu,
- grpc_millis_to_timespec(deadline, GPR_CLOCK_REALTIME))) {
- // timed out
- break;
- }
- }
-
- apple_pollset->workers.erase(it);
-
- // If the pollset is shut down asynchronously and this is the last pending
- // worker, the shutdown process is complete at this moment and the shutdown
- // callback will be called.
- if (apple_pollset->is_shutdown && apple_pollset->workers.empty()) {
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, apple_pollset->shutdown_closure,
- GRPC_ERROR_NONE);
- }
- }
-
- return GRPC_ERROR_NONE;
-}
-
-/// Kick a specific worker. The caller must acquire the lock GrpcApplePollset.mu
-/// before calling this function.
-static void kick_worker(GrpcAppleWorker* worker) {
- worker->kicked = true;
- worker->cv.Signal();
-}
-
-/// The caller must acquire the lock GrpcApplePollset.mu before calling this
-/// function. The kick action simply signals the condition variable of the
-/// worker.
-static grpc_error* pollset_kick(grpc_pollset* pollset,
- grpc_pollset_worker* specific_worker) {
- GrpcApplePollset* apple_pollset =
- reinterpret_cast(pollset);
-
- GRPC_POLLING_TRACE("pollset kick: %p, worker:%p", pollset, specific_worker);
-
- if (specific_worker == nullptr) {
- if (apple_pollset->workers.empty()) {
- apple_pollset->kicked_without_poller = true;
- } else {
- GrpcAppleWorker* actual_worker = apple_pollset->workers.front();
- kick_worker(actual_worker);
- }
- } else if (specific_worker == GRPC_POLLSET_KICK_BROADCAST) {
- for (auto& actual_worker : apple_pollset->workers) {
- kick_worker(actual_worker);
- }
- } else {
- GrpcAppleWorker* actual_worker =
- reinterpret_cast(specific_worker);
- kick_worker(actual_worker);
- }
-
- return GRPC_ERROR_NONE;
-}
-
-static void pollset_init(grpc_pollset* pollset, gpr_mu** mu) {
- GRPC_POLLING_TRACE("pollset init: %p", pollset);
- GrpcApplePollset* apple_pollset = new (pollset) GrpcApplePollset();
- *mu = apple_pollset->mu.get();
-}
-
-/// The caller must acquire the lock GrpcApplePollset.mu before calling this
-/// function.
-static void pollset_shutdown(grpc_pollset* pollset, grpc_closure* closure) {
- GRPC_POLLING_TRACE("pollset shutdown: %p", pollset);
-
- GrpcApplePollset* apple_pollset =
- reinterpret_cast(pollset);
- apple_pollset->is_shutdown = true;
- pollset_kick(pollset, GRPC_POLLSET_KICK_BROADCAST);
-
- // If there is any worker blocked, shutdown will be done asynchronously.
- if (apple_pollset->workers.empty()) {
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, GRPC_ERROR_NONE);
- } else {
- apple_pollset->shutdown_closure = closure;
- }
-}
-
-static void pollset_destroy(grpc_pollset* pollset) {
- GRPC_POLLING_TRACE("pollset destroy: %p", pollset);
- GrpcApplePollset* apple_pollset =
- reinterpret_cast(pollset);
- apple_pollset->~GrpcApplePollset();
-}
-
-size_t pollset_size(void) { return sizeof(GrpcApplePollset); }
-
-grpc_pollset_vtable grpc_apple_pollset_vtable = {
- pollset_global_init, pollset_global_shutdown,
- pollset_init, pollset_shutdown,
- pollset_destroy, pollset_work,
- pollset_kick, pollset_size};
-
-// pollset_set implementation
-
-grpc_pollset_set* pollset_set_create(void) { return nullptr; }
-void pollset_set_destroy(grpc_pollset_set* pollset_set) {}
-void pollset_set_add_pollset(grpc_pollset_set* pollset_set,
- grpc_pollset* pollset) {}
-void pollset_set_del_pollset(grpc_pollset_set* pollset_set,
- grpc_pollset* pollset) {}
-void pollset_set_add_pollset_set(grpc_pollset_set* bag,
- grpc_pollset_set* item) {}
-void pollset_set_del_pollset_set(grpc_pollset_set* bag,
- grpc_pollset_set* item) {}
-
-grpc_pollset_set_vtable grpc_apple_pollset_set_vtable = {
- pollset_set_create, pollset_set_destroy,
- pollset_set_add_pollset, pollset_set_del_pollset,
- pollset_set_add_pollset_set, pollset_set_del_pollset_set};
-
-#endif
diff --git a/src/core/lib/iomgr/ev_apple.h b/src/core/lib/iomgr/ev_apple.h
deleted file mode 100644
index a05f91ce15f..00000000000
--- a/src/core/lib/iomgr/ev_apple.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#ifndef GRPC_CORE_LIB_IOMGR_EV_APPLE_H
-#define GRPC_CORE_LIB_IOMGR_EV_APPLE_H
-
-#include
-
-#ifdef GRPC_APPLE_EV
-
-#include
-
-#include "src/core/lib/iomgr/pollset.h"
-#include "src/core/lib/iomgr/pollset_set.h"
-
-void grpc_apple_register_read_stream(CFReadStreamRef read_stream,
- dispatch_queue_t dispatch_queue);
-
-void grpc_apple_register_write_stream(CFWriteStreamRef write_stream,
- dispatch_queue_t dispatch_queue);
-
-extern grpc_pollset_vtable grpc_apple_pollset_vtable;
-
-extern grpc_pollset_set_vtable grpc_apple_pollset_set_vtable;
-
-#endif
-
-#endif
diff --git a/src/core/lib/iomgr/iomgr_posix_cfstream.cc b/src/core/lib/iomgr/iomgr_posix_cfstream.cc
index 24f9f4101b2..72b2ae5eb00 100644
--- a/src/core/lib/iomgr/iomgr_posix_cfstream.cc
+++ b/src/core/lib/iomgr/iomgr_posix_cfstream.cc
@@ -16,20 +16,6 @@
*
*/
-/// CFStream is build-enabled on iOS by default and disabled by default on other
-/// platforms (see port_platform.h). To enable CFStream build on another
-/// platform, the users need to define macro "GRPC_CFSTREAM=1" when building
-/// gRPC.
-///
-/// When CFStream is to be built (either by default on iOS or by macro on other
-/// platforms), the users can disable CFStream with environment variable
-/// "grpc_cfstream=0". This will let gRPC to fallback to use POSIX sockets. In
-/// addition, the users may choose to use an alternative CFRunLoop based pollset
-/// "ev_apple" by setting environment variable "grpc_cfstream_run_loop=1". This
-/// pollset resolves a bug from Apple when CFStream streams dispatch events to
-/// dispatch queues. The caveat of this pollset is that users may not be able to
-/// run a gRPC server in the same process.
-
#include
#include "src/core/lib/iomgr/port.h"
@@ -37,7 +23,6 @@
#ifdef GRPC_CFSTREAM_IOMGR
#include "src/core/lib/debug/trace.h"
-#include "src/core/lib/iomgr/ev_apple.h"
#include "src/core/lib/iomgr/ev_posix.h"
#include "src/core/lib/iomgr/iomgr_internal.h"
#include "src/core/lib/iomgr/iomgr_posix.h"
@@ -48,7 +33,6 @@
#include "src/core/lib/iomgr/timer.h"
static const char* grpc_cfstream_env_var = "grpc_cfstream";
-static const char* grpc_cfstream_run_loop_env_var = "GRPC_CFSTREAM_RUN_LOOP";
extern grpc_tcp_server_vtable grpc_posix_tcp_server_vtable;
extern grpc_tcp_client_vtable grpc_posix_tcp_client_vtable;
@@ -58,33 +42,6 @@ extern grpc_pollset_vtable grpc_posix_pollset_vtable;
extern grpc_pollset_set_vtable grpc_posix_pollset_set_vtable;
extern grpc_address_resolver_vtable grpc_posix_resolver_vtable;
-static void apple_iomgr_platform_init(void) { grpc_pollset_global_init(); }
-
-static void apple_iomgr_platform_flush(void) {}
-
-static void apple_iomgr_platform_shutdown(void) {
- grpc_pollset_global_shutdown();
-}
-
-static void apple_iomgr_platform_shutdown_background_closure(void) {}
-
-static bool apple_iomgr_platform_is_any_background_poller_thread(void) {
- return false;
-}
-
-static bool apple_iomgr_platform_add_closure_to_background_poller(
- grpc_closure* closure, grpc_error* error) {
- return false;
-}
-
-static grpc_iomgr_platform_vtable apple_vtable = {
- apple_iomgr_platform_init,
- apple_iomgr_platform_flush,
- apple_iomgr_platform_shutdown,
- apple_iomgr_platform_shutdown_background_closure,
- apple_iomgr_platform_is_any_background_poller_thread,
- apple_iomgr_platform_add_closure_to_background_poller};
-
static void iomgr_platform_init(void) {
grpc_wakeup_fd_global_init();
grpc_event_engine_init();
@@ -119,53 +76,32 @@ static grpc_iomgr_platform_vtable vtable = {
iomgr_platform_add_closure_to_background_poller};
void grpc_set_default_iomgr_platform() {
- char* enable_cfstream_str = getenv(grpc_cfstream_env_var);
- bool enable_cfstream =
- enable_cfstream_str == nullptr || enable_cfstream_str[0] != '0';
- char* enable_cfstream_run_loop_str = getenv(grpc_cfstream_run_loop_env_var);
- // CFStream run-loop is disabled by default. The user has to enable it
- // explicitly with environment variable.
- bool enable_cfstream_run_loop = enable_cfstream_run_loop_str != nullptr &&
- enable_cfstream_run_loop_str[0] == '1';
- if (!enable_cfstream) {
- // Use POSIX sockets for both client and server
- grpc_set_tcp_client_impl(&grpc_posix_tcp_client_vtable);
- grpc_set_tcp_server_impl(&grpc_posix_tcp_server_vtable);
- grpc_set_pollset_vtable(&grpc_posix_pollset_vtable);
- grpc_set_pollset_set_vtable(&grpc_posix_pollset_set_vtable);
- grpc_set_iomgr_platform_vtable(&vtable);
- } else if (enable_cfstream && !enable_cfstream_run_loop) {
- // Use CFStream with dispatch queue for client; use POSIX sockets for server
- grpc_set_tcp_client_impl(&grpc_cfstream_client_vtable);
- grpc_set_tcp_server_impl(&grpc_posix_tcp_server_vtable);
- grpc_set_pollset_vtable(&grpc_posix_pollset_vtable);
- grpc_set_pollset_set_vtable(&grpc_posix_pollset_set_vtable);
- grpc_set_iomgr_platform_vtable(&vtable);
- } else {
- // Use CFStream with CFRunLoop for client; server not supported
- grpc_set_tcp_client_impl(&grpc_cfstream_client_vtable);
- grpc_set_pollset_vtable(&grpc_apple_pollset_vtable);
- grpc_set_pollset_set_vtable(&grpc_apple_pollset_set_vtable);
- grpc_set_iomgr_platform_vtable(&apple_vtable);
+ char* enable_cfstream = getenv(grpc_cfstream_env_var);
+ grpc_tcp_client_vtable* client_vtable = &grpc_posix_tcp_client_vtable;
+ // CFStream is enabled by default on iOS, and disabled by default on other
+ // platforms. Defaults can be overriden by setting the grpc_cfstream
+ // environment variable.
+#if TARGET_OS_IPHONE
+ if (enable_cfstream == nullptr || enable_cfstream[0] == '1') {
+ client_vtable = &grpc_cfstream_client_vtable;
}
+#else
+ if (enable_cfstream != nullptr && enable_cfstream[0] == '1') {
+ client_vtable = &grpc_cfstream_client_vtable;
+ }
+#endif
+
+ grpc_set_tcp_client_impl(client_vtable);
+ grpc_set_tcp_server_impl(&grpc_posix_tcp_server_vtable);
grpc_set_timer_impl(&grpc_generic_timer_vtable);
+ grpc_set_pollset_vtable(&grpc_posix_pollset_vtable);
+ grpc_set_pollset_set_vtable(&grpc_posix_pollset_set_vtable);
grpc_set_resolver_impl(&grpc_posix_resolver_vtable);
+ grpc_set_iomgr_platform_vtable(&vtable);
}
bool grpc_iomgr_run_in_background() {
- char* enable_cfstream_str = getenv(grpc_cfstream_env_var);
- bool enable_cfstream =
- enable_cfstream_str == nullptr || enable_cfstream_str[0] != '0';
- char* enable_cfstream_run_loop_str = getenv(grpc_cfstream_run_loop_env_var);
- // CFStream run-loop is disabled by default. The user has to enable it
- // explicitly with environment variable.
- bool enable_cfstream_run_loop = enable_cfstream_run_loop_str != nullptr &&
- enable_cfstream_run_loop_str[0] == '1';
- if (enable_cfstream && enable_cfstream_run_loop) {
- return false;
- } else {
- return grpc_event_engine_run_in_background();
- }
+ return grpc_event_engine_run_in_background();
}
#endif /* GRPC_CFSTREAM_IOMGR */
diff --git a/src/core/lib/iomgr/pollset_set_custom.cc b/src/core/lib/iomgr/pollset_set_custom.cc
index 2c1df608197..099388f7c5b 100644
--- a/src/core/lib/iomgr/pollset_set_custom.cc
+++ b/src/core/lib/iomgr/pollset_set_custom.cc
@@ -22,23 +22,23 @@
#include "src/core/lib/iomgr/pollset_set.h"
-static grpc_pollset_set* pollset_set_create(void) {
+grpc_pollset_set* pollset_set_create(void) {
return (grpc_pollset_set*)((intptr_t)0xdeafbeef);
}
-static void pollset_set_destroy(grpc_pollset_set* /*pollset_set*/) {}
+void pollset_set_destroy(grpc_pollset_set* /*pollset_set*/) {}
-static void pollset_set_add_pollset(grpc_pollset_set* /*pollset_set*/,
- grpc_pollset* /*pollset*/) {}
+void pollset_set_add_pollset(grpc_pollset_set* /*pollset_set*/,
+ grpc_pollset* /*pollset*/) {}
-static void pollset_set_del_pollset(grpc_pollset_set* /*pollset_set*/,
- grpc_pollset* /*pollset*/) {}
+void pollset_set_del_pollset(grpc_pollset_set* /*pollset_set*/,
+ grpc_pollset* /*pollset*/) {}
-static void pollset_set_add_pollset_set(grpc_pollset_set* /*bag*/,
- grpc_pollset_set* /*item*/) {}
+void pollset_set_add_pollset_set(grpc_pollset_set* /*bag*/,
+ grpc_pollset_set* /*item*/) {}
-static void pollset_set_del_pollset_set(grpc_pollset_set* /*bag*/,
- grpc_pollset_set* /*item*/) {}
+void pollset_set_del_pollset_set(grpc_pollset_set* /*bag*/,
+ grpc_pollset_set* /*item*/) {}
static grpc_pollset_set_vtable vtable = {
pollset_set_create, pollset_set_destroy,
diff --git a/src/core/lib/iomgr/port.h b/src/core/lib/iomgr/port.h
index 211423e643d..1d2e9506451 100644
--- a/src/core/lib/iomgr/port.h
+++ b/src/core/lib/iomgr/port.h
@@ -129,7 +129,6 @@
#define GRPC_CFSTREAM_IOMGR 1
#define GRPC_CFSTREAM_CLIENT 1
#define GRPC_CFSTREAM_ENDPOINT 1
-#define GRPC_APPLE_EV 1
#define GRPC_POSIX_SOCKET_ARES_EV_DRIVER 1
#define GRPC_POSIX_SOCKET_EV 1
#define GRPC_POSIX_SOCKET_EV_EPOLL1 1
diff --git a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/InteropTests.xcscheme b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/InteropTests.xcscheme
index d4557937965..cbde360a338 100644
--- a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/InteropTests.xcscheme
+++ b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/InteropTests.xcscheme
@@ -66,13 +66,8 @@
ReferencedContainer = "container:Tests.xcodeproj">
-
-
-
-
+
+
-
-
-
-
+
+
-
-
-
-
+
+
-
-
-
-
+
+
-
-
-
-
+
+