From 05aab1efc8f491ce634c2d095865032a1ef8831d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Wed, 15 Feb 2006 14:15:44 +0100
Subject: [PATCH] Disconnect harder.

Rev: lib/modules/Sql.pmod/tds.pike:1.13
---
 lib/modules/Sql.pmod/tds.pike | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/lib/modules/Sql.pmod/tds.pike b/lib/modules/Sql.pmod/tds.pike
index dc4660498b..2c75d383fe 100644
--- a/lib/modules/Sql.pmod/tds.pike
+++ b/lib/modules/Sql.pmod/tds.pike
@@ -1,5 +1,5 @@
 /*
- * $Id: tds.pike,v 1.12 2006/02/14 16:19:34 grubba Exp $
+ * $Id: tds.pike,v 1.13 2006/02/15 13:15:44 grubba Exp $
  *
  * A Pike implementation of the TDS protocol.
  *
@@ -236,8 +236,10 @@ static {
 	string header = socket->read(8);
 	if (!header || sizeof(header) < 8) {
 	  busy = !(done = 1);
+	  int errno = socket->errno();
+	  Disconnect();
 	  tds_error("Failed to read packet header: %O, %s.\n",
-		    header, strerror(socket->errno()));
+		    header, strerror(errno));
 	}
 	TDS_WERROR("Read header:\n%s\n", hex_dump(header));
 	int packet_type;
@@ -475,8 +477,7 @@ static {
 		      raw);
 	TDS_WERROR("Wrapped packet: %O\n%s\n", raw, hex_dump(raw));
 	if (socket->write(raw) != sizeof(raw)) {
-	  socket->close();
-	  socket = 0;
+	  Disconnect();
 	  tds_error("Failed to send packet.\n"
 		    "raw: %O\n", raw);
 	}
@@ -1353,10 +1354,13 @@ static {
 
   int busy;
 
-  void Disconnect()
+  void Disconnect(int|void keep_alive)
   {
     con->disconnect();
     con = 0;
+    if (!keep_alive) {
+      destruct();
+    }
   }
 
   void Connect(string server, int port, string database,
@@ -1617,7 +1621,7 @@ static void create(string|void server, string|void database,
 		   string|void user, string|void password)
 {
   if (con) {
-    Disconnect();
+    Disconnect(1);
   }
   int port = DEF_PORT;
   if (server) {
-- 
GitLab