diff --git a/Lib/asyncio/events.py b/Lib/asyncio/events.py
index 68dc25e..40946bb 100644
--- a/Lib/asyncio/events.py
+++ b/Lib/asyncio/events.py
@@ -625,23 +625,16 @@
 
     class _Local(threading.local):
         _loop = None
-        _pid = None
         _set_called = False
 
     def __init__(self):
         self._local = self._Local()
-        self._local._pid = os.getpid()
 
     def get_event_loop(self):
         """Get the event loop.
 
         This may be None or an instance of EventLoop.
         """
-        if self._local._pid != os.getpid():
-            # If we detect we're in a child process forked by multiprocessing,
-            # we reset self._local so that we'll get a new event loop.
-            self._local = self._Local()
-
         if (self._local._loop is None and
                 not self._local._set_called and
                 isinstance(threading.current_thread(), threading._MainThread)):
diff --git a/Lib/test/test_asyncio/test_unix_events.py b/Lib/test/test_asyncio/test_unix_events.py
index 5775668..104f995 100644
--- a/Lib/test/test_asyncio/test_unix_events.py
+++ b/Lib/test/test_asyncio/test_unix_events.py
@@ -13,7 +13,6 @@
 import tempfile
 import threading
 import unittest
-import multiprocessing
 from unittest import mock
 from test import support
 
@@ -1793,37 +1792,6 @@
         return asyncio.FastChildWatcher()
 
 
-class ForkedProcessTests(unittest.TestCase):
-    def setUp(self):
-        self.parent_loop = asyncio.SelectorEventLoop()
-        asyncio.set_event_loop(self.parent_loop)
-        self.ctx = multiprocessing.get_context("fork")
-
-    def tearDown(self):
-        self.parent_loop.close()
-
-    def _check_loops_not_equal(self, old_loop):
-        loop = asyncio.get_event_loop()
-        if loop is old_loop:
-            raise RuntimeError("Child process inherited parent's event loop")
-
-        try:
-            val = loop.run_until_complete(asyncio.sleep(0.05, result=42))
-            if val != 42:
-                raise RuntimeError("new event loop does not work")
-        finally:
-            loop.close()
-
-        sys.exit(loop is old_loop)
-
-    def test_new_loop_in_child(self):
-        p = self.ctx.Process(target=self._check_loops_not_equal,
-                             args=(self.parent_loop,))
-        p.start()
-        p.join()
-        self.assertEqual(p.exitcode, 0)
-
-
 class PolicyTests(unittest.TestCase):
 
     def create_policy(self):
diff --git a/Misc/NEWS.d/next/Library/2018-05-29-12-06-54.bpo-22087.uv7_Y6.rst b/Misc/NEWS.d/next/Library/2018-05-29-12-06-54.bpo-22087.uv7_Y6.rst
deleted file mode 100644
index 92127cd..0000000
--- a/Misc/NEWS.d/next/Library/2018-05-29-12-06-54.bpo-22087.uv7_Y6.rst
+++ /dev/null
@@ -1,3 +0,0 @@
-Fix Policy.get_event_loop() to detect fork and return a new loop.
-
-Original patch by Dan O'Reilly.
