diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c
index 993366413d4ac51ae1838df199d686989c29167e..e00dc967619ffc42a07911ad7d8fb42b115ca99d 100644
--- a/src/sbbs3/js_socket.c
+++ b/src/sbbs3/js_socket.c
@@ -215,7 +215,10 @@ static void do_js_close(JSContext *cx, js_socket_private_t *p, bool finalize)
 	size_t i;
 
 	if(p->session != -1) {
-		destroy_session(lprintf, p->session);
+		if (p->tls_server)
+			destroy_session(lprintf, p->session);
+		else
+			cryptDestroySession(p->session);
 		p->session=-1;
 	}
 
@@ -2308,7 +2311,10 @@ static JSBool js_socket_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict
 			break;
 		case SOCK_PROP_DESCRIPTOR:
 			if(p->session != -1) {
-				destroy_session(lprintf, p->session);
+				if (p->tls_server)
+					destroy_session(lprintf, p->session);
+				else
+					cryptDestroySession(p->session);
 				p->session=-1;
 			}
 			if(JS_ValueToInt32(cx,*vp,&i))
@@ -2389,7 +2395,10 @@ static JSBool js_socket_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict
 			}
 			else {
 				if(p->session != -1) {
-					destroy_session(lprintf, p->session);
+					if (p->tls_server)
+						destroy_session(lprintf, p->session);
+					else
+						cryptDestroySession(p->session);
 					p->session=-1;
 					ioctlsocket(p->sock,FIONBIO,(ulong*)&(p->nonblocking));
 					do_js_close(cx, p, false);