diff --git a/dlls/secur32/schannel.c b/dlls/secur32/schannel.c
index 5404d90c5e9..3db2772b057 100644
--- a/dlls/secur32/schannel.c
+++ b/dlls/secur32/schannel.c
@@ -132,6 +132,9 @@ static BOOL schan_imp_create_session(gnutls_session_t *s, BOOL is_server)
         return FALSE;
     }
 
+    pgnutls_transport_set_pull_function(*s, schan_pull_adapter);
+    pgnutls_transport_set_push_function(*s, schan_push_adapter);
+
     return TRUE;
 }
 
@@ -1058,9 +1061,6 @@ static SECURITY_STATUS SEC_ENTRY schan_InitializeSecurityContextW(
             HeapFree(GetProcessHeap(), 0, ctx);
         }
 
-        pgnutls_transport_set_pull_function(ctx->session, schan_pull_adapter);
-        pgnutls_transport_set_push_function(ctx->session, schan_push_adapter);
-
         phNewContext->dwLower = handle;
         phNewContext->dwUpper = 0;
     }