diff --git a/lib/url.c b/lib/url.c
index 78c25aebc7c782bf71b5807f3a29cb9d9a47ca9e..e9dc7a02b22cc2a3d24f278703f8c81c37c2a4ce 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -1325,16 +1325,16 @@ CURLcode Curl_disconnect(struct connectdata *conn)
        we shall forget. */
     conn->data->state.authstage = 0;
 
+  if(conn->curl_disconnect)
+    /* This is set if protocol-specific cleanups should be made */
+    conn->curl_disconnect(conn);
+
   if(-1 != conn->connectindex) {
     /* unlink ourselves! */
     infof(conn->data, "Closing connection #%d\n", conn->connectindex);
     conn->data->state.connects[conn->connectindex] = NULL;
   }
 
-  if(conn->curl_disconnect)
-    /* This is set if protocol-specific cleanups should be made */
-    conn->curl_disconnect(conn);
-
   Curl_safefree(conn->proto.generic);
   Curl_safefree(conn->newurl);
   Curl_safefree(conn->path);  /* the URL path part */