Try adding some more debug information to the last test that fails on PyPy to see what travis-ci tells us.
diff --git a/OpenSSL/test/test_ssl.py b/OpenSSL/test/test_ssl.py
index 881d409..a8177a4 100644
--- a/OpenSSL/test/test_ssl.py
+++ b/OpenSSL/test/test_ssl.py
@@ -5,7 +5,7 @@
 Unit tests for :py:obj:`OpenSSL.SSL`.
 """
 
-from gc import collect
+from gc import collect, get_referrers
 from errno import ECONNREFUSED, EINPROGRESS, EWOULDBLOCK, EPIPE
 from sys import platform, version_info
 from socket import SHUT_RDWR, error, socket
@@ -1139,6 +1139,7 @@
         self.assertRaises(
             TypeError, context.set_tlsext_servername_callback, 1, 2)
 
+
     def test_old_callback_forgotten(self):
         """
         If :py:obj:`Context.set_tlsext_servername_callback` is used to specify a new
@@ -1158,7 +1159,13 @@
 
         context.set_tlsext_servername_callback(replacement)
         collect()
-        self.assertIdentical(None, tracker())
+
+        callback = tracker()
+        if callback is not None:
+            referrers = get_referrers(callback)
+            referrers.remove(locals())
+            if referrers:
+                self.fail("Some references remain: %r" % (referrers,))
 
 
     def test_no_servername(self):