diff -dupr a/lib_pypy/_cffi_ssl/_stdssl/__init__.py b/lib_pypy/_cffi_ssl/_stdssl/__init__.py
--- a/lib_pypy/_cffi_ssl/_stdssl/__init__.py	2021-02-10 00:15:40.815208732 +0100
+++ b/lib_pypy/_cffi_ssl/_stdssl/__init__.py	2021-02-10 00:19:27.963109365 +0100
@@ -1008,10 +1008,10 @@ for name in SSL_CTX_STATS_NAMES:
     SSL_CTX_STATS.append((name, getattr(lib, attr)))
 
 class _SSLContext(object):
-    __slots__ = ('ctx', '_check_hostname', 'servername_callback',
+    __slots__ = ('ctx', '_check_hostname',
                  'alpn_protocols', '_alpn_protocols_handle', '_protocol'
                  'npn_protocols', 'set_hostname', '_post_handshake_auth',
-                 '_sni_cb', '_npn_protocols_handle')
+                 '_sni_cb', '_sni_cb_handle', '_npn_protocols_handle')
     def __new__(cls, protocol):
         self = object.__new__(cls)
         self.ctx = ffi.NULL
@@ -1451,15 +1451,17 @@ class _SSLContext(object):
                     "is not in the current OpenSSL library.")
         if cb is None:
             lib.SSL_CTX_set_tlsext_servername_callback(self.ctx, ffi.NULL)
-            self._sni_cb= None
+            self._sni_cb = None
+            lib.SSL_CTX_set_tlsext_servername_arg(self.ctx, ffi.NULL)
+            self._sni_cb_handle = None
             return
         if not callable(cb):
             lib.SSL_CTX_set_tlsext_servername_callback(self.ctx, ffi.NULL)
             raise TypeError("not a callable object")
-        self.scb = ServernameCallback(cb, self)
-        sni_cb = ffi.new_handle(self.scb)
+        self._sni_cb = ServernameCallback(cb, self)
+        self._sni_cb_handle = ffi.new_handle(self._sni_cb)
         lib.SSL_CTX_set_tlsext_servername_callback(self.ctx, _servername_callback)
-        lib.SSL_CTX_set_tlsext_servername_arg(self.ctx, sni_cb)
+        lib.SSL_CTX_set_tlsext_servername_arg(self.ctx, self._sni_cb_handle)
 
     def cert_store_stats(self):
         store = lib.SSL_CTX_get_cert_store(self.ctx)
