Re: app crashes if lost connection during query, seems to be a bug.

From: "Dave Page" <dpage(at)vale-housing(dot)co(dot)uk>
To: <tame_doggie(at)yahoo(dot)com>, <pgsql-odbc(at)postgresql(dot)org>
Subject: Re: app crashes if lost connection during query, seems to be a bug.
Date: 2005-10-07 22:13:11
Message-ID: 028c01c5cb8c$53077ec2$6a01a8c0@valehousing.co.uk
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc


The SOCK_* code is all gone in the current code which uses libpq instead. I have actually tested the server shutdown case and the driver handled it as it should.

Regards, Dave

-----Original Message-----
From: "doggie tame"<tame_doggie(at)yahoo(dot)com>
Sent: 07/10/05 22:32:19
To: "pgsql-odbc(at)postgresql(dot)org"<pgsql-odbc(at)postgresql(dot)org>
Subject: [ODBC] app crashes if lost connection during query, seems to be a bug.

hi, there

application crashes if lost connection during query
(such as server is shuted down in immediate mode).
it's due to that after connection closed, the socket
flush funciton, SOCK_flush_output, is still trying to
write/flush to the non-exist socket, during the socket
destruction stage.

the socket should be marked as "CLOSED" when
connection is lost, such as, in socket.c

UCHAR
SOCK_get_next_byte(SocketClass *self)
{
.......
if (self->buffer_filled_in == 0)
{
self->errornumber = SOCKET_CLOSED;
self->errormsg = "Socket has been
closed.";
self->buffer_filled_in = 0;
self->socket=-1; //@mark the socket
"CLOSED"!
return 0;
}
}
return self->buffer_in[self->buffer_read_in++];
}


__________________________________
Yahoo! Mail - PC Magazine Editors' Choice 2005
http://mail.yahoo.com

---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?

http://www.postgresql.org/docs/faq

-----Unmodified Original Message-----
hi, there

application crashes if lost connection during query
(such as server is shuted down in immediate mode).
it's due to that after connection closed, the socket
flush funciton, SOCK_flush_output, is still trying to
write/flush to the non-exist socket, during the socket
destruction stage.

the socket should be marked as "CLOSED" when
connection is lost, such as, in socket.c

UCHAR
SOCK_get_next_byte(SocketClass *self)
{
......
if (self->buffer_filled_in == 0)
{
self->errornumber = SOCKET_CLOSED;
self->errormsg = "Socket has been
closed.";
self->buffer_filled_in = 0;
self->socket=-1; //@mark the socket
"CLOSED"!
return 0;
}
}
return self->buffer_in[self->buffer_read_in++];
}


__________________________________
Yahoo! Mail - PC Magazine Editors' Choice 2005
http://mail.yahoo.com

---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?

http://www.postgresql.org/docs/faq

Browse pgsql-odbc by date

  From Date Subject
Next Message Marten Feldtmann 2005-10-09 11:04:21 Windows, ODBC drivers and strange points ...
Previous Message doggie tame 2005-10-07 21:26:19 app crashes if lost connection during query, seems to be a bug.