]> granicus.if.org Git - postgresql/commitdiff
Make libpq on windows not try to send chunks larger than 64Kb.
authorMagnus Hagander <magnus@hagander.net>
Wed, 20 Aug 2008 11:53:45 +0000 (11:53 +0000)
committerMagnus Hagander <magnus@hagander.net>
Wed, 20 Aug 2008 11:53:45 +0000 (11:53 +0000)
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.

src/interfaces/libpq/fe-misc.c

index 33c704b5190f9a1e9de835c9525257aedb354c61..cc3e758ef2ecc2f65e183d141c83f80ad3a8111f 100644 (file)
@@ -23,7 +23,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/interfaces/libpq/fe-misc.c,v 1.134 2008/05/29 22:02:44 tgl Exp $
+ *       $PostgreSQL: pgsql/src/interfaces/libpq/fe-misc.c,v 1.135 2008/08/20 11:53:45 mha Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -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)
                {