diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c
index a2dd7d4c95997884839978b0ad8aad7f515dad2e..412b36a06c6fca38d16312d1fb237d3013ce66c5 100644
--- a/src/sbbs3/mailsrvr.c
+++ b/src/sbbs3/mailsrvr.c
@@ -1747,15 +1747,15 @@ static void pop3_thread(void* arg)
 	update_clients();
 	client_off(socket);
 
+	SOCKET sock = socket;
+	mail_close_socket(&socket, &session);
+	/* Must be last */
 	{ 
 		int32_t remain = thread_down();
 		if(startup->options&MAIL_OPT_DEBUG_POP3)
 			lprintf(LOG_DEBUG,"%04d %s [%s] session thread terminated (%u threads remain, %lu clients served)"
-				,socket, client.protocol, host_ip, remain, ++stats.pop3_served);
+				,sock, client.protocol, host_ip, remain, ++stats.pop3_served);
 	}
-
-	/* Must be last */
-	mail_close_socket(&socket, &session);
 }
 
 static ulong rblchk(SOCKET sock, const char* prot, union xp_sockaddr *addr, const char* rbl_addr)
@@ -5028,22 +5028,22 @@ static void smtp_thread(void* arg)
 	update_clients();
 	client_off(socket);
 
-	{
-		int32_t remain = thread_down();
-		lprintf(LOG_INFO,"%04d %s %s Session thread terminated (%u threads remain, %lu clients served)"
-			,socket, client.protocol, client_id, remain, ++stats.smtp_served);
-	}
-	free(mailproc_to_match);
-
 #ifdef _WIN32
 	if(relay_user.number) {
 		if(startup->sound.logout[0] && !sound_muted(&scfg)) 
 			PlaySound(startup->sound.logout, NULL, SND_ASYNC|SND_FILENAME);
 	}
 #endif
+	SOCKET sock = socket;
+	mail_close_socket(&socket, &session);
 
 	/* Must be last */
-	mail_close_socket(&socket, &session);
+	{
+		int32_t remain = thread_down();
+		lprintf(LOG_INFO,"%04d %s %s Session thread terminated (%u threads remain, %lu clients served)"
+			,sock, client.protocol, client_id, remain, ++stats.smtp_served);
+	}
+	free(mailproc_to_match);
 }
 
 BOOL bounce(SOCKET sock, smb_t* smb, smbmsg_t* msg, char* err, BOOL immediate)