summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagnus Hagander2008-08-20 11:53:51 +0000
committerMagnus Hagander2008-08-20 11:53:51 +0000
commit7be040bfa5cd8dcf43b573c9c023f8cf1ea9364b (patch)
treede819b83dd43784bbc1feaff496fc7f3e82a7795
parent8e0059e6237927f146a496018fd9a2d6b6b13660 (diff)
Make libpq on windows not try to send chunks larger than 64Kb.
Per Microsoft knowledge base article Q201213, early versions of Windows fail when we do this. Later versions of Windows appear to have a higher limit than 64Kb, but do still fail on large sends, so we unconditionally limit it for all versions. Patch from Tom Lane.
-rw-r--r--src/interfaces/libpq/fe-misc.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/interfaces/libpq/fe-misc.c b/src/interfaces/libpq/fe-misc.c
index dcb227a7ac..a7f9379d97 100644
--- a/src/interfaces/libpq/fe-misc.c
+++ b/src/interfaces/libpq/fe-misc.c
@@ -752,7 +752,16 @@ pqSendSome(PGconn *conn, int len)
int sent;
char sebuf[256];
+#ifndef WIN32
sent = pqsecure_write(conn, ptr, len);
+#else
+ /*
+ * Windows can fail on large sends, per KB article Q201213. The failure-point
+ * appears to be different in different versions of Windows, but 64k should
+ * always be safe.
+ */
+ sent = pqsecure_write(conn, ptr, Min(len, 65536));
+#endif
if (sent < 0)
{